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


10

是否有可能将current-menu-item作为php变量?

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

任何帮助表示赞赏!

Answers:


15

通过过滤可以做到这一点wp_nav_menu_objects,这是检查哪个项目是当前菜单项的最简单的位置,因为WordPress已经为您添加了这些类

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>元素中?),则应首先呈现菜单,然后再显示


你好,Jan-想知道是否有办法创建$ menu_item->当前项目子项的数组吗?尝试了几件事,但没有走太远..!
v3nt 2011年

在您的过滤器的帮助下管理了此问题-回答如下。干杯!
v3nt 2011年

Jan Fabry /我尝试使用wpse16243_wp_nav_menu_objects来检索当前菜单ID。但这不是一致的。在主页和菜单项之间切换并不能始终为我提供正确的菜单项-有点“滞后”。关于如何获取当前菜单ID的任何建议?
史蒂文

使用函数名称开头是否有原因wpse16243?我看到这种奇怪的名称非常普遍,并且想知道它的全部含义。免责声明:Wordpress新手。
Stephen Watkins 2012年

2
@Steve:只是一个唯一的前缀:WordPress Stack Exchange question number 16243。如果人们直接复制此代码,则它不会与可能共享相同功能名称的其他插件冲突。
Jan Fabry 2012年

4

您可以使用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位置名称调用:

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

echo $menu_name;

2
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;
}

0

我不确定我是否会完全遵循。

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

您打算如何处理此文字?您想在哪里展示它?我假设您正在尝试在“类别索引”页面上显示它(因为您指出的是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)之类的东西才能获取特定菜单项的标题。


嘿芯片-这页; bfami.modernactivity.co.uk/category/museum,所以基本上这只猫是“博物馆”,但我想显示“ MUSEUMS WE SUPPORT”,这是在菜单页面中设置的导航标签(自定义标题)。认为有可能以某种方式抓住它吗?
v3nt 2011年

有帮助。查看我的答案编辑。您有两个选择:重命名类别,或使用wp_get_nav_menu_items()
Chip Bennett

欢呼筹码-最终更改了类别标题!只是认为会有一种简单的方法来获取菜单标签...
v3nt 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.