web-dev-qa-db-ja.com

すべてのナビゲーションメニューを削除します(ただ便利なクラスは残しておきます)。

すべてのメニュー項目クラスを削除しようとしています(.current-menu-{item/parent/ancestor}と.menu-item-has-childrenを除く)。

function custom_nav_menu_css_class($classes) {
    $classes = preg_replace('/^((menu|page)[-_\w+]+)+/', '', $classes);
    return $classes;
}
add_filter('nav_menu_css_class', 'custom_nav_menu_css_class');

これはほとんど仕事です、以外は.menu-item-has-childrenを削除しますか?削除から除外するには、何を変更すればよいですか。

(P.S。私はカスタムウォーカーを使用したくないのですが…)

1
Lisa

ホワイトリストを使って、正規表現をもっと読みやすいものに置き換えることができます。

add_filter( 'nav_menu_css_class', function( $classes ) {
    $allowed = array(
        'menu-item-has-children',
        'current-menu-item'
    );
    $output      = array();

    foreach ( $classes as $class )
    {
        if ( in_array( $class, $allowed ) )
            $output[] = $class;
    }

    return $output;
});

そうすれば、ホワイトリストも保守しやすくなります。

1
fuxia