Удалите все классы навигационного меню (но сохраните полезные …)

Я пытаюсь удалить все классы элементов меню (кроме .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 ? Любая идея, что я должен изменить, чтобы исключить ее из удаления?

(PS Я бы предпочел не использовать пользовательский ходок …)

Solutions Collecting From Web of "Удалите все классы навигационного меню (но сохраните полезные …)"

Вы можете работать с белым списком и заменять регулярное выражение чем-то более читаемым:

 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; }); 

Это облегчило бы поддерживать белый список.