为什么‘NAV_MENU_ITEM_ARGS’筛选器的$ITEM参数为空?

时间:2017-09-27 作者:Peter Westerlund

我想勾搭上\'nav_menu_item_args\' 筛选方法start_el() 在里面class Walker_nav_menu:

/**
* Filters the arguments for a single nav menu item.
*
* @since 4.4.0
*
* @param stdClass $args  An object of wp_nav_menu() arguments.
* @param WP_Post  $item  Menu item data object.
* @param int      $depth Depth of menu item. Used for padding.
*/
$args = apply_filters( \'nav_menu_item_args\', $args, $item, $depth );
这是我的代码:

function filter_nav_menu_item_args($args, $item, $depth)
{
        if ($args->menu->slug == \'countries\')
        {
            $args->link_before = print_r($item, true); // <-- Outputs nothing
        }

    return $args;
}
add_filter(\'nav_menu_item_args\', \'filter_nav_menu_item_args\' );
但我在尝试使用$item 论点它是空的。我很确定我在叫菜单。这个$args 数组包含所有正确的值。

那么,这是一个bug吗?还是我做错了什么?

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

过滤器(和操作)需要用回调接受的参数数声明;它是的第四个参数add_filter() (默认值1):

add_filter( \'nav_menu_item_args\', \'filter_nav_menu_item_args\', 10, 3 );
function filter_nav_menu_item_args( $args, $item, $depth ) {

    print_r( $item );

    return $args;

}
请参见add_filter() for reference.

结束

相关推荐

Multiple category filters

我正在为客户端开发一个事件插件,我需要几个“类别过滤器”。现在我有了一个post类型的参数,我注册了该post类型和分类法,并创建了另一个分类法。在我的category metabox中,我只有第一个分类显示为我可以选择的类别。如果我在我的菜单上创建另一个帖子类型,它会像一个不同的插件菜单一样显示,其中子菜单是我的帖子类型所在的位置,我只想有一个不同的“类别过滤器”,我可以将类别添加到其中,然后在同一个插件中显示为类别元框。所以现在我有一个“Place”的帖子类型和分类法,它显示在我的插件中,通常是一个类