web-dev-qa-db-ja.com

Wp_get_nav_menu_itemsがどこのテーマの場所にあるかを決定します

wp_get_nav_menu_itemsフィルタフックでメニューを変更するときに、メニューがどのテーマの配置に対応しているかを判断する方法はありますか?

特定のメニューにのみ項目を追加したいのですが、メニューのIDや名前に頼る必要はありません。

3
Daniel A. White

これが最も簡単な方法であることはわかりませんが、wp_nav_menu_argsが呼び出されたときにwp_nav_menuフィルターを介して変更したい場所だけに条件付きでフィルターを追加し、その後すぐにフィルターを削除して他のメニューに適用しないようにできます。

function wpa108544_nav_menu_args( $args ){
    // check if it's the location we want the filter applied to
    if( 'primary' == $args['theme_location'] )
        add_filter( 'wp_get_nav_menu_items', 'wpa108544_get_nav_menu_items', 10, 3 );

    return $args;
}
add_filter( 'wp_nav_menu_args', 'wpa108544_nav_menu_args' );


function wpa108544_get_nav_menu_items( $items, $menu, $args ){
    // remove the filter
    remove_filter( current_filter(), __FUNCTION__, 10, 3 );

    // do your menu manipulation stuff here
}
2
Milo