我想把它做成一个插件,因为有很多人问起它,但这里是你能做的。这是迄今为止我发现的最一致的选项,因为它允许您在菜单中执行任何您想要的操作,而不需要编写自己的walker类。
安装stag custom sidebars
将此添加到您的函数中。php或个人插件。
if( !function_exists(\'shortcode_my_menu\') ) {
function shortcode_my_menu( $item_output, $item ) {
if ( !empty($item->description)) {
$output = do_shortcode($item->description);
if ( $output != $item->description )
$item_output = $output;
}
return $item_output;
}
add_filter("walker_nav_menu_start_el", "shortcode_my_menu" , 10 , 2);
}
if( !function_exists(\'eval_to_allow_php_in_text_widget\') ) {
function eval_to_allow_php_in_text_widget($text) {
ob_start();
eval(\'?>\'
.$text);
$text = ob_get_contents();
ob_end_clean();
return $text;
}
add_filter(\'widget_text\', \'do_shortcode\');
add_filter( \'widget_title\', \'do_shortcode\' );
add_filter(\'widget_text\', \'eval_to_allow_php_in_text_widget\');
add_filter(\'widget_title\', \'eval_to_allow_php_in_text_widget\');
}
如果您允许其他用户访问widget,我建议您对上述内容执行类似操作:
if (current_user_can(\'administrator\'))
这样,您是唯一有权在小部件文本中执行php的人。
基本上使用stag自定义侧栏可以快速创建侧栏。它将生成一个短代码,允许您将其添加到站点中的任何位置。使用上面的第一个功能,您可以安全地在菜单描述中添加短代码。当您在菜单描述中添加stag创建的短代码时,它会将您添加的任何小部件添加到侧栏中,并替换特定的菜单项。第二个函数允许您在小部件中添加短代码,还可以使用php。
使用此方法,完全无需创建自定义菜单漫游器,因为您可以在小部件中完成所有操作。
此外,您还可以使用这些功能,将html直接添加到描述中。。。但是,您需要在“主题”菜单模板中提供描述,以使其正常工作:
remove_filter(\'nav_menu_description\', \'wptexturize\');
remove_filter(\'nav_menu_description\', \'strip_tags\');
add_filter( \'wp_setup_nav_menu_item\', \'html_nav_menu_description\' );
function html_nav_menu_description($menu_item) {
$menu_item->description = apply_filters( \'nav_menu_description\', $menu_item->post_content );
return $menu_item;
}
菜单中还有一些我没有测试过的短代码:
add_filter(\'wp_nav_menu\', \'do_shortcode\', 11);
add_filter(\'wp_nav_menu_items\', \'do_shortcode\');
如果您对短代码周围的p和break标记等格式有任何问题,请尝试将此函数添加到过滤器:
function fix_shortcode_output($content){
$array = array (
\'[\' => \'[\',
\']\' => \']\',
\']\' => \']\'
);
$patternp = \'/]*>\\[/\';
$content = strtr($content, $array);
$content = preg_replace($patternp, "[", $content);
return $content;
}