問題描述

我正在嘗試獲取導航中的所有 ID 並將其轉換為字串,以便我可以使用它與 wp_query 來獲取只列在導航欄中的頁面。獲取 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);

但是它返回錯誤的數字。當我去管理區域並將滑鼠懸停在頁面上時,顯示在螢幕底部的位址列中的數字不匹配。我究竟做錯了什麼?

最佳解決方案

選單專案儲存在 posts 表中,並帶有 nav_menu_itempost_type 。那麼你所返回的是選單項本身的 ID,而不是它所指向的。

選單項引用的頁面/帖子 ID 儲存在 postmeta 表中,其中 post_id 與選單項 IDmeta_key = _menu_item_object_id 匹配。獲取 meta_value(即選單項指向的頁面) 的最簡單的方法是使用如下所示:

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

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。