问题是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类一样。只是不能那样做。