web-dev-qa-db-ja.com

関数内で特定のwp_nav_menuをターゲットにする方法

Function.phpを介してwp_nav_menuリンクに特定のクラスを追加していますが、特定のメニューをターゲットにすることはできません。これは、ページ上のすべてのwp_menu_navをターゲットにしたものです。

function add_menuclass_active($ulclass) {
 return preg_replace('/<a /', '<a class="list-group"', $ulclass, 1);
  }
 add_filter('wp_nav_menu', 'add_menuclass_active');

私は運もないで以下も使ってみました

function add_menuclass_active( $nav_menu, $args ) {
if( $args->theme_location == 'CUSTOM MENU' )
    return preg_replace( '/<a /', '<a class="list-group"', $nav_menu, 1 );
    return $nav_menu;
}
add_filter( 'wp_nav_menu', 'add_menuclass_active', 10, 2 );
3
rob.m

私は以下のコードを試してみました、そしてそれはうまくいきました。

これをあなたのfunctions.phpに追加してください

register_nav_menus(array(
    'top-menu' => __('Menu1', 'twentyfourteen'),
    'side-menu' => __('Menu2', 'twentyfourteen'),
    'footer-menu' => __('Menu3', 'twentyfourteen')
) );

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();

    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

最後に、ダッシュボードApperance->menusからアンカーカスタムクラスを追加する必要がある特定のメニューに対して、オプション "Menu1"を選択する必要があります。 (アンカーリンクがカスタムクラスを必要としない他のメニューにはmenu2またはmenu3を選択してください)

特定のメニューの最初のメニュー項目に "active class"を追加するには、これを試してください。

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();

    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
        if ($item->menu_order == 1){
            $item_output = preg_replace('/<a /', '<a class="list-group active" ', $item_output, 1);
        }
    }

    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);

アクティブクラスをすべてのメニューの最初のメニュー項目に追加する必要がある場合は、これを使用します。

function my_walker_nav_menu_start_el($item_output, $item, $depth, $args) {
    $menu_locations = get_nav_menu_locations();

    if ( has_term($menu_locations['top-menu'], 'nav_menu', $item) ) {
       $item_output = preg_replace('/<a /', '<a class="list-group" ', $item_output, 1);
    }
    if ($item->menu_order == 1){
        $item_output = preg_replace('/<a /', '<a class="active" ', $item_output, 1);
    }
    return $item_output;
}
add_filter('walker_nav_menu_start_el', 'my_walker_nav_menu_start_el', 10, 4);
6
Zammuuz