向主菜单添加快捷代码

时间:2014-07-01 作者:Nsokyi

是否可以将快捷码添加到主菜单?

我尝试了以下方法,但没有成功?

add_filter(\'wp_nav_menu_items\',\'add_nwadcart_widget_to_menu\', 10, 2);
function add_nwadcart_widget_to_menu( $items, $args ) {
    if( $args->theme_location == \'main-nav\' )
        return $items.get_shortcode("[nwadcart_widget]");

return $items;
}
我还想将其作为菜单上的最后一项添加,并将其包装在以下内容中

<ul>
   <li>widegt would go here</li>
</ul>
ul将位于主菜单上的最后一个li/列表项中。

谢谢

1 个回复
SO网友:Bryan Willis

我想把它做成一个插件,因为有很多人问起它,但这里是你能做的。这是迄今为止我发现的最一致的选项,因为它允许您在菜单中执行任何您想要的操作,而不需要编写自己的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 (
        \'[\' =&gt; \'[\', 
        \']\' =&gt; \']\', 
        \']\' =&gt; \']\'
    );
    $patternp = \'/]*&gt;\\[/\'; 
    $content = strtr($content, $array);
    $content = preg_replace($patternp, "[", $content);
    return $content;
}

结束

相关推荐

Gist shortcode is not working

我刚安装了一个全新的Wordpress用于测试,因为我打算刷新我当前的网站。我的一个要求是能够嵌入Gist中的代码。在Wordpress文档之后,较新版本附带了Gist的特定短代码:Gist Shortcode问题是它根本不起作用。我试着简单地将url粘贴在一行上,或者将其包裹在[要点]标签上,但没有任何效果。url只是在帖子中显示为原始文本。我知道有些插件提供了相同的功能,但我真的希望使用Wordpress的内置功能。我的网站已自动托管并安装在Azure网站上,运行PHP 5.4和Wordpress 3