このコードは私のすべてのメニュー項目に追加のクラスを追加します。
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$classes[] = 'btn';
return $classes;
}
このフィルタをメインメニュー(テーマの場所「プライマリメニュー」)に限定する方法
よろしく、
ダニエル
私はまた、この問題を解決しようとしていて、解決策を探しているときに、 nav_menu_css_class
フィルタが実際には3番目のパラメータ を除いていることを発見しました。これはあなたのメニューに関連する変数を含むオブジェクトで、クラス名を特定のメニューに条件付きで適用するために使用できるtheme_location
変数を含みます。テーマの中で wp_nav_menu を呼び出すときには、必ずtheme_location
を設定する必要があります。
これは例です。
add_filter( 'nav_menu_css_class', 'special_nav_class', 10, 3 );
function special_nav_class( $classes, $item, $args ) {
if ( 'primary-menu' === $args->theme_location ) {
$classes[] = 'btn';
}
return $classes;
}
同じ問題を解決しようとしてこのスレッドに出会いました-これが私が思いついたことです。メニュー項目ごとに呼び出されるため、これがどれほどうまく機能するかはわかりませんが、メニューはWordPress内で分類法として設定されているようです。したがって、has_term()
を使用して項目が特定のメニューで、get_nav_menu_locations()
を使用して、どのメニューがどのテーマの場所にあるかのリストを取得します。
コードの変更:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
$menu_locations = get_nav_menu_locations();
if ( has_term($menu_locations['primary-menu'], 'nav_menu', $item) ) {
$classes[] = 'btn';
}
return $classes;
}
Functions.phpを修正する必要はありません。あなたのテンプレートファイルに入ってwp_nav_menuを見つけ、それに 'menu_class'を追加するだけです。
<?php wp_nav_menu( array( 'theme_location' => 'primary','menu_class' => 'newmenuclass' ) ); ?>
Function.phpで自分自身に追加すればすべてうまくいくでしょう
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class ($classes, $item) {
$classes[] = 'nav__link';
if (in_array('current-menu-item', $classes) ){
$classes[] = 'nav__link-active';
}
return $classes;
}