在WP 3.1的WP菜单中使用快捷代码(通过NAV_MENU_OBJECTS)?

时间:2011-02-25 作者:youngmicroserf

我找到了这个新插件

http://wpsmith.net/wordpress/creating-multiple-custom-menus-in-wordpress-3-1

这是使用一个新的3.1挂钩(wp\\u nav\\u menu\\u objects)从导航菜单项数组中删除特定的导航菜单项,然后由walker类解析,如果用户没有登录。该插件使用特定的CSS类作为标识符来决定要删除哪些项。

所以我一直在想,是否可以在导航菜单项描述中使用短代码,为了获得有关特定菜单项显示的一组高级条件(例如,在x页上显示,在y页上不显示,或者,特别有用:通过在walker解析数组之前将子页/类别插入nav\\U菜单项数组,自动包含子页/类别等)

但正在添加

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’);
导致页面无法正确加载。不是空白页错误,但页面在导航菜单containter div之后立即停止呈现。是否有任何方法可以使用本机WP短代码功能实现此目的?或者是否有必要在分析nav项内容的函数中创建自定义短代码解析器?

谢谢你的建议!

3 个回复
SO网友:wyrfel

问题是do_shortcode() 在其第一个参数中需要一个字符串,而wp_nav_menu_objects get传递了一个菜单对象数组。

Sou您必须编写自己的包装器函数do_shortcode, 像这样的。。。

function my_nav_menu_objects_shortcode_mangler($items) {
    foreach ($items as $item) {
        $item->classes = explode(\' \', do_shortcode(implode(\' \', (array)$item->classes)));
    }
    return $items;
}
可能有用。您必须通过查看wp-includes/nav-menu-template.php 然后导出哪些属性最适合修改,以及如何修改(它们具有哪种格式,如何将其转换为字符串以便可以在其上运行短代码,等等)。

不过,在我看来,实现这种逻辑的其他方法可能比在其中嵌入短代码功能更好。

还请注意,使用该模型,您不能在菜单项的一个属性中有一个短代码,并期望它修改另一个属性的输出。。。就像你不能在你的菜单项标签上有一个短代码,希望它能添加或删除css类一样。只是不能那样做。

SO网友:aendra

如果将优先级更改为11,会发生什么情况?

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’, 11);
这就是如何将过滤器添加到短代码中的\\u内容。php。请参见:http://codex.wordpress.org/Function_Reference/do_shortcode

SO网友:Travis Smith

实际上,更好的做法是修改利用Menu Descriptions

结束

相关推荐

Thesis -style Navigation

我正在研究一个主题,我希望用户能够像论文一样选择要在主题选项页面中显示的页面。我已经在谷歌上搜索了几个小时的逆向工程论文,但还没有找到一个很好的解决方案。我想知道是否有人做过这件事或看过教程。