如何通过$ post->获取菜单标签或$ page-> ID

时间:2014-04-02 08:52:56

标签: wordpress

完全修改请重读

您好, 我正在使用的主题显示页面标题,而不是它在面包屑中的菜单标签。我试图获取面包屑,而不是显示相关的菜单标签,如果可用,如果没有,则默认为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;
}

提前谢谢你,

3 个答案:

答案 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 )