web-dev-qa-db-ja.com

デフォルトのメニュークラスを無効にする方法

私はデフォルトのメニュークラスを無効にしたい、以下のコードはメニュークラスを完全に無効にすることです。

add_theme_support( 'menus' );
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
    return is_array($var) ? array_intersect($var, array('current-menu-item', 'current-menu-ancestor')) :
    '';
}

しかし今問題は私もメニューにカスタムクラスを追加するときです

enter image description here

examplenavconそのクラスは来ません。私はadd_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);のためにそれを少し理解しているので、すべてのdefualtクラスを無効にする方法はありますがカスタムクラスがある場合それはそれを追加します

私のトランプルコードは<?php wp_nav_menu( array('menu' => 'mainmenu','items_wrap'=>'%3$s', 'container' => false)); ?>です

1
pagol

私は別のスレッドから答えを得ました。

    add_filter('nav_menu_css_class', 'discard_menu_classes', 10, 2);


function discard_menu_classes($classes, $item) {
    $classes = array_filter( 
        $classes, 
        create_function( '$class', 
                 'return in_array( $class, 
                      array( "current-menu-item", "current-menu-parent" ) );' )
        );
    return array_merge(
        $classes,
        (array)get_post_meta( $item->ID, '_menu_item_classes', true )
        );
    }

ref:http://wordpress.stackexchange.com/questions/30417/removing-all-classes-from-nav-menu-except-current-menu-item-and-current-menu-par

0
pagol