WP_NAV_MENU在关闭容器之前和最后一个列表项之后添加内容

时间:2016-10-15 作者:DᴀʀᴛʜVᴀᴅᴇʀ

我一直在寻找一种硬编码的方法<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_menuWordpress 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_itemspreg_replace 但我不确定什么是针对特定菜单硬编码div的正确方法,因为您无法在菜单数组中修改它?

1 个回复
最合适的回答,由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

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL