ナビゲーションに表示されるページだけを取得するために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);
しかし、それは間違った数を返しています。管理領域に移動してマウスをページ上に移動すると、画面下部のアドレスバーに表示される番号が一致しません。何がおかしいのですか?
メニュー項目は、post_type
がnav_menu_item
のposts
テーブルに格納されます。つまり、返されるのはメニュー項目自体の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 );