2010-08-23 90 views
2

我在基於數據庫條目自動生成短代碼時遇到了一些問題。WordPress中的動態短代碼和功能

我能得到一個正常工作的短代碼即:

function route_sc5() { 
     return "<div>Route 5</div>"; 
    } 
    add_shortcode('route 5','route_sc'); 

及以下簡碼來激活這將是[route 5]

這工作。但我需要的是爲每個數據庫條目生成的簡碼。例如:

$routes = $wpdb->get_results($wpdb->prepare("SELECT * FROM wp_routes")); 
foreach($routes as $route) 
{ 
    function route_sc$route->id() { 
     return "<div>Route $route->id</div>"; 
    } 
    add_shortcode('route $route->id','route_sc$route->id'); 
} 

以上只是我希望如何工作的一個例子。不是字面上我正在使用的代碼。我將如何去實現這一目標? ): 謝謝。

+1

function route_sc($atts, $content = null) { extract(shortcode_atts(array( 'num' => '', 'bg' => '', 'text' => '', ), $atts)); global $wpdb; $bus = $wpdb->get_row($wpdb->prepare("SELECT * FROM wp_route WHERE id = '$num'")); return "<div class='".$bus->text_colour."' style='background-color:".$bus->bg_colour."'>".$bus->route_id."</div></div>"; } add_shortcode('route','route_sc'); 

與簡碼考慮要求:-) – 2010-08-23 10:05:37

+4

這一項上的wordpress.stackoverflow.com網站你的意思是wordpress.stackexchange .com :-) – 2010-08-23 11:56:28

+0

感謝,我不知道有這樣的wordpress論壇,書籤(Y) – 2010-08-23 15:23:33

回答

2

下面是使用PHP 5.3 anonymous functions動態簡碼回調的例子:

for($i = 1; $i <= 5; $i++) { 
    $cb = function() use ($i) { 
     return "<div>Route $i</div>"; 
    }; 

    add_shortcode("route $i", $cb); 
} 

我要問,雖然:可你剛纔完成你需要使用簡碼參數做什麼?即。 [route num=3]。然後你可以只有一個handle_route()函數和一個[route]簡碼,這可能會簡化一些事情。

此外,雖然技術上你可以在名稱中包含一個帶有空格的簡碼,但我認爲它會產生令人困惑的模糊性。如果您決定每條路線都需要特定的簡碼,我會推薦「route5」或「route-5」,而不是「路線5」。

+0

route $id
實際上是什麼(因爲這只是一個例子)..是一組div,其中有一個類設置爲存儲在數據庫中的值,style = backround color也是從數據庫中的值設置的,也是作爲數據庫中的路由名稱。我有一個hanle_route()函數,我沒有完全理解,我可以如何拉出這些數據,而不需要用戶做這樣的事情:[route num = 5 bgcolor =#123456 class = W] 但是我將會擁有一個hanle_route一個去看看我是否可以儘可能地爲用戶簡化它。 – 2010-08-23 15:19:46

1

動態函數名稱在PHP中是不可能的。

但你可以嘗試eval。

eval('function route_sc'.$route->id.'() { return "<div>Route '.$route->id.'</div>"; }'); 
+0

動態函數名稱在PHP中是完全可能的:「$ func ='my_function'; $ func();」 – 2010-08-23 11:57:27

+0

@Bobby你可以輕鬆地調用[變量函數](http://php.net/manual/en/functions.variable-functions.php),但它們稍微難以創建。 – 2010-08-23 12:47:16

0

以不同的方式進行操作:簡碼可以接受參數。因此而不是[route 5][route rt="5"]。這樣你的短代碼處理功能就保持通用,並且改變的部分應該是動態的。這也意味着,如果在頁面加載期間遇到意外的短代碼,您可以正確處理它,而不是WordPress,只需剝離代碼並將其替換爲無。

這裏看到更多的信息:http://codex.wordpress.org/Shortcode_API

3

謝謝你們,終於得到了它的工作。這裏是ANY1代碼誰可能需要在未來:在[route num="5a"]