您不能直接在菜单页面的菜单 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'
and 'content'
。
例如,如果您的简码是这样的:
[example id="5" other="test"]Shortcode content[/example]
你会更新:
'#placeholder#' => array(
'shortcode' => 'example';
'atts' => array( 'id' => '5', 'other' => 'test' );
'content' => 'Shortcode content';
),
请注意,我不使用do_shortcode()
它是因为它是一项资源密集型功能,并且在这种情况下不是适合该工作的工具。