web-dev-qa-db-ja.com

なぜ 'nav_menu_item_args'フィルタの$ item引数が空なのですか?

'nav_menu_item_args' メソッドのstart_el()class Walker_nav_menu filterにフックしようとしています。

/**
* 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配列には、正しい値がすべて含まれています。

だから、これはバグですか?それとも私は何か悪いことをしていますか?

2

フィルタ(およびアクション)は、コールバックによって受け入れられた引数の数で宣言される必要があります。これはadd_filter()の4番目のパラメータです(デフォルトは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()を参照してください

3
cybmeta