对上面发布的代码稍加修改,只获得自定义类。自定义类始终是第一项。
function pa_assign_menu_class_to_body(){
// \'main\' is the theme_location, set earlier using register_nav_menus()
$menu_name = \'main\';
$class_list = array();
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
// _wp_menu_item_classes_by_context() adds current, current_item_parent and current_item_ancestor to the appropriate arrays in the provided variable
_wp_menu_item_classes_by_context( $menu_items );
$classes = array();
foreach($menu_items as $menu_item) {
if ($menu_item->current == 1) {
$classes[\'current\'] = $menu_item->classes;
}
if ($menu_item->current_item_parent == 1) {
$classes[\'parents\'] = $menu_item->classes;
}
if ($menu_item->current_item_ancestor == 1) {
$classes[\'ancestors\'] = $menu_item->classes;
}
}
// create a one-dimensional array of unique classes
foreach($classes as $class)
foreach ($class as $cls) $class_list[] = $cls;
$class_list = array_values(array_unique($class_list));
}
// if, for some reason, we have no results, we need to assign a default class otherwise WordPress complains
if (empty($class_list)) $class_list[] = \'default\';
//Gets first class if custom. If not, returns null.
if ($class_list[0] != \'menu-item\') {
$class_list_return[] = $class_list[0];
} else {
$class_list_return[] = null;
}
return $class_list_return;
}
add_filter( \'body_class\', \'pa_assign_menu_class_to_body\');
EDIT: 不过,此过滤器和原始过滤器将替换默认类。如果您只想添加它们。。。
function pa_assign_menu_class_to_body($classes){
// \'main\' is the theme_location, set earlier using register_nav_menus()
$menu_name = \'main\';
$class_list = array();
if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
$menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
// _wp_menu_item_classes_by_context() adds current, current_item_parent and current_item_ancestor to the appropriate arrays in the provided variable
_wp_menu_item_classes_by_context( $menu_items );
foreach($menu_items as $menu_item) {
if ($menu_item->current == 1) {
$classes[\'current\'] = $menu_item->classes;
}
if ($menu_item->current_item_parent == 1) {
$classes[\'parents\'] = $menu_item->classes;
}
if ($menu_item->current_item_ancestor == 1) {
$classes[\'ancestors\'] = $menu_item->classes;
}
}
// create a one-dimensional array of unique classes
foreach($classes as $class)
foreach ($class as $cls) $class_list[] = $cls;
$class_list = array_values(array_unique($class_list));
}
// if, for some reason, we have no results, we need to assign a default class otherwise WordPress complains
if (empty($class_list)) $class_list[] = \'default\';
//Gets first class if custom. If not, returns null.
if ($class_list[0] != \'menu-item\') {
$class_list_return[] = $class_list[0];
} else {
$class_list_return[] = null;
}
return array_merge($classes, $class_list_return);
}
add_filter( \'body_class\', \'pa_assign_menu_class_to_body\');