如何将当前菜单项标题作为变量获取?

时间:2011-05-03 作者:v3nt

是否可以将当前菜单项作为php变量获取?

我通过菜单项“我们支持的博物馆”列出了类别博物馆,所以我想获得“我们支持的博物馆”并在某处展示它?

感谢您的帮助!

4 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

这可以通过过滤实现wp_nav_menu_objects, 哪个地方最容易检查哪个项目是当前菜单项,因为WordPress already added the classes for you.

add_filter( \'wp_nav_menu_objects\', \'wpse16243_wp_nav_menu_objects\' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS[\'wpse16243_title\'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}
现在可以使用这个新的全局变量,而不是普通的标题。简单示例:

add_filter( \'single_cat_title\', \'wpse16243_single_cat_title\' );
function wpse16243_single_cat_title( $cat_title )
{
    if ( isset( $GLOBALS[\'wpse16243_title\'] ) ) {
        return $GLOBALS[\'wpse16243_title\'];
    }
    return $cat_title;
}
当然,只有在显示标题之前显示菜单时,这才有效。如果你早一点需要(也许在<title> 元素?),你应该first render the menu and then display it later.

SO网友:Giraldi

您可以使用wp_get_nav_menu_items(). 这是一个样本function:

<?php
function my_get_menu_item_name( $loc ) {
    global $post;

    $locs = get_nav_menu_locations();

    $menu = wp_get_nav_menu_object( $locs[$loc] );

    if($menu) {

        $items = wp_get_nav_menu_items($menu->term_id);

        foreach ($items as $k => $v) {
            // Check if this menu item links to the current page
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}
然后致电function 使用location namenav menu 您希望使用:

<?php
$menu_name = my_get_menu_item_name( \'NAV_MENU_LOCATION_NAME\' ); // eg. \'primary\'

echo $menu_name;

SO网友:v3nt
add_filter( \'wp_nav_menu_objects\', \'wpse16243_wp_nav_menu_objects\' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {

        if ($menu_item->current ) {
            $GLOBALS[\'currentMenuTitle\'] = $menu_item->title;
            $GLOBALS[\'currentMenuID\'] = $menu_item->ID;



            break;
        }
    }


    return $sorted_menu_items;
}


function get_menu_items_children( $menu_item_id=\'\' )
{   
    global $wpdb;

      //     AND meta_key=\'_menu_item_menu_item_parent\'

    $myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = \'".$menu_item_id."\' AND meta_key=\'_menu_item_menu_item_parent\' ORDER BY $wpdb->posts.menu_order ASC" );


    foreach ( $myrows as $menu_item ) {

        $sc = get_object_vars($menu_item);  

        $myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = \'".$sc[\'post_id\']."\' AND meta_key=\'_menu_item_object_id\' " );

        foreach ( $myrowsb as $menu_itemb ) {

            $scb = get_object_vars($menu_itemb);    
            $pmIDs[] = $scb[\'meta_value\'];

        }

    }


    return $pmIDs;
}
SO网友:Chip Bennett

我不确定我是否完全明白。

“我们支持的博物馆”由帖子标题、页面标题、类别标题等生成(或者,如果您使用自定义导航菜单,它可以是自定义标题)。

你想对这篇课文做什么?您想在哪里显示它?我假设您正试图在类别索引页上显示它(因为您指出它是current-menu-item)? 如果是,只需致电<?php single_cat_title(); ?> 输出类别标题。

如果需要其他类别信息,可以使用以下内容:

$cat = get_the_category();
$currentcat = $cat[0];
这使得以下变量可用:

$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)
如果您位于类别索引页面之外的其他位置,则需要将$catid传递给这些函数。

编辑:

由于您指出“我们支持的博物馆”是一个自定义菜单标题,因此最简单的方法是将类别从“博物馆”重命名为“我们支持的博物馆”(注:您可以留下slug,museums, 未更改)。然而,这样做将意味着“我们支持的博物馆”将显示为类别标题,其他地方可能会输出到模板中。如果这是可以接受的,那么就不用担心了。

否则,您必须使用以下内容wp_get_nav_menu_items() (Codex ref) 以获取特定菜单项的标题。

结束

相关推荐

WP Subtitle Plugin Problem

我在使用WP字幕插件时遇到了一些问题。插入后<?thesubtitle()?> 或<?getthe_subtitle($id)?> 进入索引。php模板我收到一个“调用未定义函数”错误-循环内部或外部似乎都无关紧要!提前感谢//更新在大多数页面中,由于toscho更新了语法,以下内容现在可以正常工作<?php get_header(); ?> <div class=\"title-posts-container\"> <h2