web-dev-qa-db-ja.com

メニュー順でwp_nav_menu()をソートする

私はバックエンド用のカスタムメニューハンドラを作りました。 CMS Page Order に基づいてドラッグドロップで並べ替えます。

現在の問題は、wp_nav_menuをデフォルト以外の方法でソートすることは不可能であるように思われるということです、それは本当に本当でしょうか?

1
INT

Nav_menu_itemsはすでにmenu_orderでソートされています。

Appearance - > Menusを選択して注文メニューを配置すると、各メニュー項目のmenu_orderが更新されます。

メニューを表示するクエリのorderbyパラメータを変更するには、pre_get_postsを使用してそれを変更します。例:

add_action( 'pre_get_posts', 'wpse_sort_nav' );
function wpse_sort_nav( $query ) {
        if ( $query->is_main_query() && get_query_var( 'post_type' ) == 'nav_menu_item' )
            $query->set( 'orderby', 'ID' );
    }

IDとmenu_orderは、デフォルトの投稿テーブルを使用して並べ替えるための唯一の実際のオプションです。タイトルはなく、post_nameはIDと同じです。

各nav_menu_itemに格納されているメタデータを使用して、pre_get_postsフィルタに追加のパラメータを追加できます。

ナビゲーションメニューのメタデータ:

_menu_item_menu_item_parent
_ menu_item_type
_ menu_item_object_id
_ menu_item_object
_ menu_item_target
_ menu_item_classes _menu_item_xfn
_ menu_item_url

6
Chris_O