我一直在寻找一种硬编码的方法<div>
特定菜单的关闭容器标记之前的标记:
$footer_nav = array(
\'menu\' => \'footer-menu\',
\'menu_class\' => \'foobar\',
\'container\' => \'ul\',
\'theme_location\' => \'footer\',
\'menu_id\' => \'footer_menu\',
\'echo\' => true,
\'depth\' => 1,
);
wp_nav_menu( $footer_nav );
但是,当我尝试添加:
\'after\' => \'<div class="foo">bar</div>\',
它将其添加到每个列表项之后。当我研究解决方案时,我遇到了
I want remove last after wp_nav_menu 和
Wordpress Functions - How to use Replace String func. to add some code 但当我尝试时:
function foobar_the_menu($items,$args) {
if ($args->theme_location == \'footer\') {
$footer_pattern = \'</li></ul>\';
$footer_replacement = \'</li><div class="foo">bar</div></ul>\';
return substr_replace( $footer_pattern, $footer_replacement, $items, 1 );
}
}
add_filter( \'wp_nav_menu\', \'foobar_the_menu\', 10, 2 );
它将删除所有菜单。在参考了其他几个问题后,我确实看到了
wp_nav_menu_items
和
preg_replace
但我不确定什么是针对特定菜单硬编码div的正确方法,因为您无法在菜单数组中修改它?
最合适的回答,由SO网友:birgire 整理而成
我认为您可以使用:
\'items_wrap\' => \'<ul id="%1$s" class="%2$s">%3$s <div class="foo">bar</div> </ul>\',
作为
wp_nav_menu()
论点
我们正在使用wp_nav_menu()
功能:
$nav_menu .= sprintf(
$args->items_wrap,
esc_attr( $wrap_id ),
esc_attr( $wrap_class ),
$items
);
其中
items_wrap
参数包含以下内容
sprintf
说明符:%1$s
匹配包裹id%2$s
匹配包裹类%3$s
为项目匹配生成的HTML