web-dev-qa-db-ja.com

Wp_nav_menuの全リスト項目にクラスを追加する

リストアイテムにクラスを追加したいwp_nav_menuがあります。私はこれがスクリーンオプションメニューから 'css classes'を選ぶことによってできることを知っています、しかしそれから私はすべてのliにクラスを与えなければなりません。

私は2深度メニューを持っています。 (例えば)

  • すべての通常のliは私がクラスlidepth1を与えたいのです
  • すべてのサブメニューliのクラスに与えたいですlidept2

これはwp_nav_menu関数で可能ですか?コーデックスを検索しましたが、「前にリンク」と「後にリンク」しか見つかりませんでしたが、それが必要なものではないと思います。

2
Maartje

nav_menu_css_class フィルタがあります。クラスを追加するのは簡単です。

function add_classes_wpse_130358($classes, $item, $args) {
  $classes[] = 'new-class';
  return $classes;
}
add_filter('nav_menu_css_class','add_classes_wpse_130358',1,3);

しかし、Walker_Nav_Menuフィルタは不思議なことにdepth変数にアクセスできないため、おそらくwalker_nav_menu_start_elを拡張するか、代わりにnav_menu_css_classフィルタを使用する必要があります。しかしwalker_nav_menu_start_elでは必要な場所にクラスを設定することはできませんので、PHPは十分新しいと仮定してください...

function depth_classes_wpse_130358($item_output, $item, $depth, $args) {
  add_action(
    'nav_menu_css_class',
    function() use ($depth) {
      $depth++;
      $classes[] = "depth-{$depth}";
      return $classes;
    }
  );
  return $item_output;
}
add_filter('walker_nav_menu_start_el','depth_classes_wpse_130358',1,4);

あなたは0より大きいすべてのレベルに対してdepth-Nを得るでしょう。

私はこれをする必要があることを今まで思い出しません。既存のマークアップは常に十分ですが、そこに行きます。

7
s_ha_dum