获取当前帖子的导航菜单名称(术语名称)

时间:2015-01-09 作者:Robbert

我想通过当前的post ID获取导航菜单名称。在我的数据库中搜索了几个小时后,我发现导航菜单基本上只是分类法“nav\\u menu”的术语。但由于某些原因,它们的工作原理不同。

我尝试使用get\\u the\\u terms()函数获取术语(导航菜单),但这不会返回任何结果。

global $post;
get_the_terms( $post->ID, \'nav_menu\' );
我找不到其他函数来获取“nav\\U菜单”分类法的“术语”。wp_get_nav_menu_items 例如,返回菜单中的帖子,这不是我需要的。

我想我需要创建自己的功能,但我找不到导航菜单的数据库结构是如何工作的。。

EDIT:

我做了以下功能,但@Rars给了我一个更快更干净的选择。

function get_post_menu( $post_id = null, $output = \'term_id\' ) {
    if( ! isset( $post_id ) ) {
        global $post;
        $post_id = $post->ID;   
    }
    global $wpdb;
    $menu = $wpdb->get_results( "
        SELECT term_taxonomy_id 
        FROM $wpdb->term_relationships
        WHERE object_id = 
        (SELECT post_id 
        FROM $wpdb->postmeta 
        WHERE meta_key = \'_menu_item_object_id\' 
        AND meta_value = $post_id)"
        , OBJECT 
    );
    $term = get_term_by( \'term_taxonomy_id\', $menu[0]->term_taxonomy_id, \'nav_menu\' );
    return $term->$output;
}

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

您缺少一个链接。帖子不会直接分配给菜单。有一个post类型nav_menu_item 在里面nav_menu 将帖子(或其他类型的目的地)链接到其在菜单中的位置的分类法。

此代码段可以帮助您开始检索:

$menu_items = get_posts( [
    \'post_type\'  => \'nav_menu_item\',
    \'meta_query\' => [
        [
            \'key\'   => \'_menu_item_object_id\',
            \'value\' => get_the_ID(),
        ]
    ],
] );

foreach ( $menu_items as $menu_item ) {
    var_dump( get_the_terms( $menu_item->ID, \'nav_menu\' ) );
}

结束

相关推荐

覆盖新WP_QUERY中的POSTS_PER_PAGE

我已经试了几个小时来解决这个问题。问题是,我有一个主题new WP_Query 设置循环。这很好用。我想获取原始查询,修改它,然后使用另一个自定义查询来显示修改后的帖子列表。除了\'posts_per_page\' 参数,该参数显示为正确设置(请参见下面的$args),但显示所有帖子。这是我的代码:目录搜索。php <?php /** * @package WordPress * @subpackage Parent_Theme * @since Pare