将过滤器nav_menu_css_class应用于Custom Walker_Nav_Menu类

时间:2015-12-05 16:12:12

标签: php wordpress

以下是适用于自定义帖子类型的过滤器"投资组合" ...它从" Blog"菜单,并突出显示ID为123的菜单,它完美地工作..它突出我的菜单ID 123,"投资组合",但它只适用于本机主导航,我的意思是我有2个不同的菜单一是使用自定义Walker_Nav_Menu制作的,它不适用于...

所以,如果我添加这个' walker' =>新my_walker()到我的代码,它没有应用以下过滤器,否则它完美地工作..任何人都可以请告诉我如何同时将它应用于自定义助行器类?...谢谢。

 function remove_parent_classes($class)
     {
       // check for current page classes, return false if they exist.
        return ($class == 'current_page_item' || $class ==      'current_page_parent' || $class == 'current_page_ancestor'  || $class == 'current-menu-item') ? FALSE : TRUE;
     }

     function add_class_to_wp_nav_menu($classes)
     {
          switch (get_post_type())
          {
            case 'portfolio':
                // we're viewing a custom post type, so remove the 'current_page_xxx and current-menu-item' from all menu items.
                $classes = array_filter($classes, "remove_parent_classes");

                // add the current page class to a specific menu item (replace ###).
                if (in_array('menu-item-123', $classes))
                {
                   $classes[] = 'current_page_parent';
                }
                break;

           // add more cases if necessary and/or a default
          }
         return $classes;
     }
     add_filter('nav_menu_css_class', 'add_class_to_wp_nav_menu');

1 个答案:

答案 0 :(得分:1)

尝试添加$item参数:

function add_class_to_wp_nav_menu($classes, $item)
{
    switch (get_post_type($item->ID))
    {
        case 'portfolio':
            $classes = array_filter($classes, "remove_parent_classes");

            if (123 == $item->ID)
            {
                $classes[] = 'current_page_parent';
            }
            break;
    }
    return $classes;
}
add_filter('nav_menu_css_class', 'add_class_to_wp_nav_menu', 10, 2);