Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将类添加到Wordpress菜单';s通过wp_导航菜单项_Php_Css_Wordpress_Navigation - Fatal编程技术网

Php 将类添加到Wordpress菜单';s通过wp_导航菜单项

Php 将类添加到Wordpress菜单';s通过wp_导航菜单项,php,css,wordpress,navigation,Php,Css,Wordpress,Navigation,我希望在每个ul的最后一个li中添加一个类。例如,如果我有: <ul> <li></li> <li> <ul> <li></li> <li></li> </ul> </li> </ul> 我想添加一个过滤器以实现以下目的: <ul> &

我希望在每个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的例子,但不要再深入了

任何帮助都将不胜感激


干杯

将以下代码添加到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


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

这个问题发布已经有一段时间了,但我一直在寻找嵌套列表项问题的答案,但在任何地方都找不到(只找到一级列表的解决方案)。所以我想出了这个,看起来很管用,但感觉有点笨重。但无论如何,请将以下内容添加到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' );
函数add_last_item_类($items){
$ar_index=array();
//循环遍历所有项并保存属于特定父项的最后一项的索引
对于($i=1;$i菜单项\父项)=$i;
endfor;
//循环浏览保存的索引,并将类“last”添加到每个索引中
foreach($ar_索引作为$last_索引):
$items[$last_index]->classes[]='last';
endforeach;
报税表(项目)(元);;
}
添加过滤器('wp\u nav\u menu\u objects'、'add\u last\u item\u class');

这有帮助吗?感谢Libin的回复。我不认为这会增加嵌套列表的标记。您能确认这是否针对儿童ul吗?