您不能直接在菜單URL上使用簡碼菜單頁面,因爲括號被刪除。但是你可以使用像這樣的佔位符:#profile_link#
。
使用functions.php
中的以下代碼,您可以創建一個自定義菜單項,其URL爲#profile_link#
,它將用您的簡碼替換它。
/**
* Filters all menu item URLs for a #placeholder#.
*
* @param WP_Post[] $menu_items All of the nave menu items, sorted for display.
*
* @return WP_Post[] The menu items with any placeholders properly filled in.
*/
function my_dynamic_menu_items($menu_items) {
// A list of placeholders to replace.
// You can add more placeholders to the list as needed.
$placeholders = array(
'#profile_link#' => array(
'shortcode' => 'my_shortcode',
'atts' => array(), // Shortcode attributes.
'content' => '', // Content for the shortcode.
),
);
foreach ($menu_items as $menu_item) {
if (isset($placeholders[ $menu_item->url ])) {
global $shortcode_tags;
$placeholder = $placeholders[ $menu_item->url ];
if (isset($shortcode_tags[ $placeholder['shortcode'] ])) {
$menu_item->url = call_user_func(
$shortcode_tags[ $placeholder['shortcode'] ]
, $placeholder['atts']
, $placeholder['content']
, $placeholder['shortcode']
);
}
}
}
return $menu_items;
}
add_filter('wp_nav_menu_objects', 'my_dynamic_menu_items');
你只需要設置'shortcode'
的$placeholders
陣列,以及可選'atts'
和'content'
。
例如,如果你的簡碼是這樣的:
[example id="5" other="test"]Shortcode content[/example]
您將更新:
'#placeholder#' => array(
'shortcode' => 'example';
'atts' => array('id' => '5', 'other' => 'test');
'content' => 'Shortcode content';
),
請注意,我don't use do_shortcode()
,因爲它是一個資源密集型功能,而不是在這種情況下工作的正確工具。
哇實際工作,一直在尋找一個很長很長的時間爲了這。很多謝謝J.D – xyz 2013-11-08 04:11:20
正是我在找的,謝謝! – hotshots 2014-09-05 15:41:26
@ J.D。 - 嗨,我試圖將這個簡碼添加到您的代碼中,但它不會工作([ip:GB] 020 7267 5222 [/ ip])。你可以幫助我 – 2015-07-07 15:07:59