问题描述

我正在尝试获取导航中的所有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。