将Filter nav_menu_css_class应用于Custom Walker_nav_menu类


Applying Filter nav_menu_css_class to Custom Walker_Nav_Menu class

下面是一个适用于自定义帖子类型"公文包"的过滤器。。它从"博客"菜单中删除了活动类,并突出显示了ID为123的菜单,效果非常好。。它突出显示了我的ID为123的菜单,即"Portfolio",但它只适用于本地主导航,我的意思是我有两个不同的菜单,一个是用自定义Walker_Nav_menu制作的,它不适用于此。。。

因此,如果我将这个"walker"=>new 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');

尝试添加$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);