问题描述
我正在尝试获取导航中的所有 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_item
的 post_type
。那么你所返回的是菜单项本身的 ID,而不是它所指向的。
菜单项引用的页面/帖子 ID 存储在 postmeta
表中,其中 post_id
与菜单项 ID
和 meta_key
= _menu_item_object_id
匹配。获取 meta_value
(即菜单项指向的页面) 的最简单的方法是使用如下所示:
$numbers[] = get_post_meta( $menu_item->ID, '_menu_item_object_id', true );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。