0

各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 をうまくターゲットにする例を見てきましたが、これより深くは行かないでください!

どんな助けでも大歓迎です。

乾杯

4

2 に答える 2

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を設定するのではなく、それぞれの要素のクラスリストに追加のマークアップを強制的に追加します。

しかし、もっとエレガントな解決策があるはずだと思います。

于 2012-05-10T15:30:00.267 に答える
0

この質問が投稿されてからしばらく経ちましたが、ネストされたリスト項目の問題に対する回答も探していましたが、どこにも見つかりませんでした (1 レベルのリストの解決策のみ)。これは機能しているように見えますが、ちょっとぎこちなく感じます。とにかく、これを 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' );
于 2012-08-13T22:29:59.453 に答える