检查菜单ID是否=$SPECIAL_ID-然后插入特定<img>

时间:2014-01-20 作者:user1231561

我目前的菜单结构如下:

<ul class="level-1" id="menu-menu1">
  <li id="menu-item-411">
    <a href="http://www.link.com">Frontpage</a>
  </li>
  <li id="menu-item-425"></li>
  <li id="menu-item-80"></li>
</ul>
What im looking to do is hardcore a little menu icon image for each different menu id, 然而,我不知道如何操纵wp_nav_menu 要插入这样的“自定义”内容吗?理想情况下,我想做的是:if($menu_id == 411) { //insert specific <img>- 结果如下:

  <li id="menu-item-411">
    <img src="my-specific-img-for-this-menu-id.gif" />
    <a href="http://www.link.com">Frontpage</a>
  </li>
现在,我的菜单打印为:

                    $nav_args = array(
                        \'theme_location\' => \'nav\',
                        \'container\' => \'none\',
                        \'menu_class\' => \'level-1\',
                        \'depth\' => 3,   
                    );

                    wp_nav_menu( $nav_args );
有什么想法吗?

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

创建自定义助行器是解决这一问题的有效方法,也是我想到的第一件事,但这并不是绝对必要的。可以通过过滤器实现这一点,尽管可以轻度滥用其中一个:)

概念验证:

function insert_image_wpse_130477($item_output) {
    remove_filter(\'walker_nav_menu_start_el\',\'insert_image_wpse_130477\');
    $prepend = apply_filters(\'my_item_prepend\',\'\');
    return $prepend.$item_output;
}

function check_id_wpse_130477($id, $item, $args) {
  if (\'menu-item-6\' == $id) { // edit for your circumstances
    add_filter(
      \'my_item_prepend\',
      function() use ($id) {
        // add logic to conditionally add your images based on the ID
        return \'##\'.$id.\'##\';
      }
    );
    add_filter(
      \'walker_nav_menu_start_el\',
      \'insert_image_wpse_130477\'
    );
  }
  return $id;
}
add_filter(\'nav_menu_item_id\',\'check_id_wpse_130477\',1,3);
我可以想出其他几种方法来实现这一点——例如,一个类,或者一个更复杂的回调和一个静态变量——但这可能是最容易遵循的方法。

SO网友:Gareth Gillman

您需要在菜单上进行自定义步行(link) 它允许您根据需要重写导航代码。

结束

相关推荐

Wordpress Flyout Menus

我有一个有点复杂的菜单结构,我正试图找出最好的方法来做到这一点。I have a top nav 它有4个部分。每个部分最多有2层深。而且I have a SUB Nav 这是基于您所在的部分,并显示为向下钻取,显示您拥有的页面。例如,假设我单击第二级顶部导航-然后我将转到显示打开并选中该部分的子页面。我希望我的解释是正确的。。。谢谢我的问题是:最好的方法是什么。我研究了一些插件,但似乎找不到合适的插件。我不需要使用插件。