web-dev-qa-db-ja.com

ナビゲートアイテムからページIDを取得する

ナビゲーションに表示されるページだけを取得するためにwp_queryで使用できるように、ナビゲーション内のすべてのIDを取得し、それを文字列に変換しようとしています。 IDを取得するためのコード:

$menu_name = 'primary';

if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] )) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );
    $menu_items = wp_get_nav_menu_items($menu->term_id);
}

foreach ( $menu_items as $menu_item ) {
    $numbers[] = $menu_item->ID;
}

$number = implode(',',$numbers);

しかし、それは間違った数を返しています。管理領域に移動してマウスをページ上に移動すると、画面下部のアドレスバーに表示される番号が一致しません。何がおかしいのですか?

10
Jamie

メニュー項目は、post_typenav_menu_itempostsテーブルに格納されます。つまり、返されるのはメニュー項目自体のIDであり、それが指すものではありません。

メニュー項目が参照するページ/投稿IDは、メニュー項目postmetaおよびpost_id = meta_keyに一致する_menu_item_object_idとともに、IDテーブルに格納されます。 meta_value(つまり、メニュー項目が指すページ)を取得する最も簡単な方法は、次のようなものを使用することです。

$numbers[] = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );

12
anu