完全修改请重读
您好, 我正在使用的主题显示页面标题,而不是它在面包屑中的菜单标签。我试图获取面包屑,而不是显示相关的菜单标签,如果可用,如果没有,则默认为page_title。
我想出了一些我认为很接近的代码。第4行/// $ menu_items = wp_get_nav_menu_items($ slug);返回null,它应该返回包含当前帖子的$ slug的导航项。显然,有些事我不明白。
我试图做的是获取当前帖子的slug,然后使用slug获取导航项目帖子。然后提取导航项的标题,并使用它来代替面包屑中的页面标题。如果页面不在导航系统中,那么它应该默认为页面标题,就像ppc广告系列目标网页的情况一样。
if ( is_page() && !$post->post_parent ) {
$title = null;
$slug = mpactMEDIA_get_the_slug( get_the_ID() );
$menu_items = wp_get_nav_menu_items( $slug );
//var_dump((array)$menu_items);
foreach ( (array)$menu_items as $key => $menu_item ) {
$title = $menu_item->post_title;
}
if ( $title ) { echo $delimiter . ' ' . $before . $title . $after; }
else { echo $delimiter . ' ' . $before . get_the_title() . $after; }
}
我的functions.php文件我有以下功能
function mpactMEDIA_get_the_slug( $id=null ){
if( empty($id) ) global $post;
if( empty($post) ) return '';
$id = $post->ID;
endif;
$slug = basename( get_permalink($id) );
return $slug;
}
提前谢谢你,
添
答案 0 :(得分:3)
我几次读了这个问题,我来到这里寻找答案,最后自己做了。
function get_menu_label_by_post_id($post_id, $menu) {
$menu_title = '';
$nav = wp_get_nav_menu_items($menu);
foreach ( $nav as $item ) {
if ( $post_id == $item->object_id ) {
$menu_title = $item->post_title;
break;
}
}
return ($menu_title !== '') ? $menu_title : get_the_title($post_id);
}
使用示例:
echo get_menu_label_by_post_id($post->ID, 'Primary Nav');
如果找到菜单标签,将返回菜单标签,否则只返回帖子ID的标题。
答案 1 :(得分:0)
检查wp_get_nav_menu_items
child_of
。它根本没有把页面塞子作为参数。
如果要列出给定页面的子页面,请使用documentation并向其传递$post
参数。
另外,作为附注,如果你知道$post->post_name
并想要slu ,,它只是{{1}}
答案 2 :(得分:0)
要获取导航项的页面 ID:
get_post_meta( $menu_item->ID, '_menu_item_object_id', true )