如何以编程方式插入新菜单项?

时间:2013-11-05 作者:agro1986

我正在开发一个插件,我想以编程方式插入菜单项。

当我的主题创建菜单时,它使用以下调用:

wp_nav_menu( array( \'theme_location\' => \'primary\', \'menu_class\' => \'nav-menu\' ) );
这导致HTML中出现如下内容:

<div class="nav-menu"><ul>
     <li class="current_page_item"><a href="somewhere">menu-item-1</a></li>
     <li class="page_item page-item-107"><a href="somewhere-else">menu item 2</a></li>
</ul></div>
我希望能够以某种方式截获它,并在结束之前以编程方式插入我自己的HTML</ul>. 我怎么把它连接起来?

2 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

在打印之前,所有菜单项都会通过过滤器运行。您可以针对wp_nav_menu_items 筛选以将内容添加到菜单:

// Filter wp_nav_menu() to add additional links and other output
function new_nav_menu_items($items) {
    $homelink = \'<li class="home"><a href="\' . home_url( \'/\' ) . \'">\' . __(\'Home\') . \'</a></li>\';
    // add the home link to the end of the menu
    $items = $items . $homelink;
    return $items;
}
add_filter( \'wp_nav_menu_items\', \'new_nav_menu_items\' );
或者,更具体地说,您可以通过替换add_filter 从上方将线路与以下线路连接,并更换$menu->slug 使用菜单的实际slug名称:

add_filter( \'wp_nav_menu_{$menu->slug}_items\', \'new_nav_menu_items\' );

Source Tutorial

SO网友:Milo

您可以设置containerfalse 并使用items_wrap 参数忽略ul, 然后该函数将只输出li 标签,可以根据需要将其打包。

wp_nav_menu(
    array(
        \'theme_location\' => \'primary\',
        \'items_wrap\' => \'%3$s\',
        \'container\' => false
    )
);

结束

相关推荐

Menus like a CMS

以下是一些内容的结构示例:Parent A -- Child A -- Child B Parent B -- Child C -- Child D Parent A 应链接到的内容Child A 和Parent B 应链接到的内容Child C. 除此之外,我不确定这是否应该完全由wordpress中的“菜单”来管理,或者它是否应该是Parent A 包含子页面的页面。唯一的问题是Parent A 不是真正的内容,只是链接到Child A.如果你需要一个真