我希望在每个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的例子但是没有更深入了!
非常感谢任何帮助。
干杯
答案 0 :(得分:0)
将以下代码添加到您的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。
我认为应该有一个更优雅的解决方案。
答案 1 :(得分:0)
自问题发布以来已经有一段时间了,但我一直在寻找嵌套列表项问题的答案,并且无法在任何地方找到它(只是单级列表的解决方案)。所以我想出了这个,这似乎有效,但感觉有点笨重。但无论如何,将它添加到你的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' );