如何在导航标签开始后添加带有Walker菜单的元素?

时间:2014-03-22 作者:Casper

我试图在导航标签开始之后和ul开始之前添加一个元素。因此,在打开nav标记后直接添加一个元素。

我尝试了这个,但这将在所有李的之后添加一个列表项。也许我们可以使用它来解决我的问题:

add_filter(\'wp_nav_menu_items\', \'add_li_to_nav\', 10, 2);

function add_li_to_nav($items, $args)
{
    $items .= \'<li>SEARCH</li>\';
    return $items;
}
我的目标是添加链接<a href="#" "mobile"> 紧接着primary-navwrapper. 如以下标记:

<nav id="primary-navwrapper" class="pushy-right">

<!-- SO HERE RIGHT AFTER NAV PLACE THE FOLLOWING ANCHOR TAG -->
<a href="#" "mobile">


<ul id="listnav" class="menu">

<li id="menu-item-160" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-160">
    <a href="">Fotografie</a>
</li>

</ul>
</nav>

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

问题不清楚,但wp_nav_menu() 有两个参数,允许您将类添加到输出中。例如

wp_nav_menu(
  array(
    \'container_class\' => \'conclass\',
    \'menu_class\' => \'menclass\'
  )
);
您可以使用wp_nav_menu_args 还要过滤。

然而,我怀疑当你说“class”时,你使用了错误的术语,而你真正想做的是在导航菜单的开头添加一个列表项。您的筛选器非常接近:

function add_li_to_nav($items, $args) {
  remove_filter(\'wp_nav_menu_items\', \'add_li_to_nav\', 10, 2);
  $items = \'<li>SEARCH</li>\'.$items;
  return $items;
}
add_filter(\'wp_nav_menu_items\', \'add_li_to_nav\', 10, 2);
这将在当前项之前添加“搜索”列表项,然后将其自身删除,以便“搜索”列表项不会添加到任何其他位置。

根据新信息更新:

到目前为止,最简单的解决方案是通过wp_nav_menu() A.\'container\'=>false 参数,并将其余部分写入标记中。

<nav id="primary-navwrapper" class="pushy-right">
  <!-- SO HERE RIGHT AFTER NAV PLACE THE FOLLOWING ANCHOR TAG -->
  <a href="#">mobile</a>><?php
  wp_nav_menu(
    array(
      \'container\' => false
    )
  ); ?>
</nav><?php
另一种选择是过滤wp_nav_menu:

function add_anchor_to_nav($menu) {
  remove_filter(\'wp_nav_menu_items\', \'add_anchor_to_nav\', 10, 2);
  $pat = \'(<nav[^>]+?>)(.*)\';
  $menu = preg_replace(\'|\'.$pat.\'|\',\'$1<a href="#">mobile</a>$2\',$menu);
  return $menu;
}
add_filter(\'wp_nav_menu\', \'add_anchor_to_nav\', 10, 2);

wp_nav_menu(
  array(
    \'container\' => \'nav\'
  )
);
regex 关于标记是危险的,但这相当简单。我认为它的表现会相对较好。

结束

相关推荐

Add Protocol to Custom Menus

我一直在使用tel: 自定义菜单中的链接与响应性设计相结合,为我的智能手机主题添加了“立即呼叫”按钮。它一直运行良好。一位客户刚刚要求我也添加一个“发送文本”按钮。我想我会用sms: 它似乎有可接受的设备支持。然而,当我保存菜单时,WordPress将其从URL中删除。经过研究,我得出结论,这与esc_url() 和/或wp_kses() (参见Trac ticket #18268). 我编造了以下代码,试图自己添加SMS协议并将其放入函数中。php:<?php function add_n