【问题标题】:How-to get a menu label via $post-> or $page->ID如何通过 $post-> 或 $page->ID 获取菜单标签
【发布时间】:2014-05-13 10:11:15
【问题描述】:

全部修改请重读

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

提前谢谢你,

提姆

【问题讨论】:

  • 你能把这个巨大的功能减少到你感兴趣的部分吗?
  • 布拉斯菲洛没问题。我已经编辑了帖子并试图澄清我的查询。谢谢。

标签: wordpress


【解决方案1】:

我读了几遍这个问题,我来到这里寻找答案,最后自己做了。

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 的标题。

【讨论】:

    【解决方案2】:

    检查documentation 是否有wp_get_nav_menu_items。它根本不需要页面 slug 作为参数。

    如果要列出给定页面的子页面,请使用wp_list_pages 并向其传递child_of 参数。

    另外,作为旁注,如果您知道 $post 并想要 slug,那就是 $post->post_name

    【讨论】:

    • 所以菜单的 slug 和页面不一样?导航项目如何链接到页面?我决定获取 post_name,因为它允许我检索任何页面的 slug,无论它是否是当前帖子,例如当前帖子的父级的 slug。
    • @mpactMEDIA wp_get_nav_menu_items 使用菜单 ID,查看文档。菜单项可能会或可能不会链接到页面。当他们是我认为信息作为额外的属性(如object_id)或类似的东西,如果你需要做一些var_dump。
    • 如果您要在任何地方用菜单名称替换原始页面标题,会不会更容易重命名?
    • 不,这是语义和 SEO 的事情。默认情况下,此特定主题使用页面标题作为面包屑中的标记。这不是它在导航菜单中列出的方式。因此,“我们的服务”页面本身可能有九个字的标题。面包屑应与菜单标签相同。它使潜在客户更容易知道他们在导航菜单中单击了什么,因为它位于面包屑中。更多.......
    • ...继续。此外,我们将为 PPC 活动创建一些登陆页面,这些登陆页面不会在导航菜单中链接,并且页面标题应显示在面包屑中,因为这将是他们用来查找网站的搜索词。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多