【问题标题】:Adding Classes to Wordpress Menu's via wp_nav_menu_items通过 wp_nav_menu_items 向 Wordpress 菜单添加类
【发布时间】:2012-05-10 13:35:15
【问题描述】:

我希望在每个 ul 的最后一个 li 中添加一个类。例如,如果我有:

<ul>
   <li></li>
   <li>
      <ul>
         <li></li>
         <li></li>
      </ul>
   </li>
</ul>

我想添加一个过滤器来做这个:

 <ul>
   <li></li>
   <li class="last">
      <ul>
         <li></li>
         <li class="last"></li>
      </ul>
   </li>
</ul>

关于如何使用 php 函数实现这一点的任何想法?我已经看到成功针对第一个 ul li 的示例,但不要再深入了!

任何帮助将不胜感激。

干杯

【问题讨论】:

标签: php css wordpress navigation


【解决方案1】:

将以下代码添加到您的functions.php

function add_first_and_last($output) {
  $output = preg_replace('/class="menu-item/', 'class="first-menu-item menu-item', $output, 1);
  $output = substr_replace($output, 'class="last-menu-item menu-item', strripos($output, 'class="menu-item'), strlen('class="menu-item'));
  return $output;
}
add_filter('wp_nav_menu', 'add_first_and_last');

这会强制将额外的标记添加到相应元素的类列表中,而不是为一个标签提供多个 ID。

我认为应该有一个更优雅的解决方案。

【讨论】:

  • 感谢李斌的回复。但是,我不相信这会为嵌套列表添加标记。你能确认这是否针对儿童 ul 的吗?
【解决方案2】:

自发布此问题以来已经有一段时间了,但我一直在寻找嵌套列表项问题的答案,但在任何地方都找不到(仅针对一级列表的解决方案)。所以我想出了这个,这似乎有效,但感觉有点笨拙。但无论如何,将其添加到您的functions.php:

function add_last_item_class( $items ) {
  $ar_index = array();
  // loop through all the items and save the index of the last item belonging to a specific parent
  for ( $i = 1; $i <= count( $items ); $i++ ):
    $ar_index[$items[$i]->menu_item_parent] = $i;
  endfor;
  // loop through the saved indexes and add the class 'last' to each of them
  foreach( $ar_index as $last_index ):
    $items[$last_index]->classes[] = 'last';
  endforeach;
  return( $items );
}
add_filter( 'wp_nav_menu_objects', 'add_last_item_class' );

【讨论】:

    猜你喜欢
    • 2017-08-17
    • 2018-08-18
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多