当自定义帖子为页面时突出显示特定菜单项

时间:2015-01-30 作者:jannnik

我知道这个问题被问了很多次,但我没有找到一个真正好的解决方案:

我有一个自定义的帖子类型“事件”,其中包含一些类别,如“演讲”。对于每个类别,我创建了一个单独的页面,其中显示类别信息和该类别中的事件列表。这些页面都可以从子菜单入口访问。

如果打开事件,则没有菜单项突出显示为当前菜单项。我认为最好的解决方案是将每个类别“链接”到它的页面,但我不知道如何做到这一点。

将适当的类添加到菜单项和它们的父菜单项中会很好,但修改导航菜单行者会很完美(另一个插件需要知道哪个是当前菜单项,以便在第二个导航栏中显示当前子菜单)。

我当前的解决方案是以下过滤器:

function my_special_nav_class( $classes, $item ) {
    global $post;

if (get_post_type() == "event") {
    $page_categories = wp_get_post_terms($post->ID, \'event-categories\');
    if ($page_categories) {
        foreach( $page_categories as $category ) {
            $ignored_terms = array(\'CRM\', \'PPM\');
            $cat_name = $category->name;
            if ( !in_array($cat_name, $ignored_terms) ) {
                if ($cat_name == $item->title) {
                    $classes[] = \'current-menu-item\';
                }
            }
        }
    }
}   
return $classes; 
} 
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
但如何将类添加到当前类的父菜单项中?

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

我想我有一个功能可以为你做这件事。

突出显示菜单项的常用方法是将类“current menu item”添加到该项,然后可以使用CSS设置突出显示链接的样式。

在这种情况下,要突出显示taxonomy menu link 如果我们在发表分类法的文章,对吗?例如,如果我们在“CategoryX”中的帖子中,我们希望突出显示“CategoryX”的菜单链接。

以下Walker\\u Nav\\u菜单的过滤器应该会有所帮助。这可以在函数中进行。php

function my_special_nav_class( $classes, $item ) {

if( \'category\' == $item->object ){  

    $current_category = array();   

    $category = get_category( $item->object_id );  
    $category = $category->term_id;

    global $wp_query, $wp_rewrite;

    $queried_object = $wp_query->get_queried_object();
    $current_category[] = $queried_object->term_id;

    // uncomment the following if you want to debug:
    // echo \'<pre>Category of this menu item<br />\';
    // print_r($category);
    // echo \'</pre>\';
    // echo \'<pre>Category queried for this page<br />\';
    // print_r($current_category);
    // echo \'</pre>\';

    if( in_array( $category, $current_category ) ) {

        $classes[] = \'current-menu-item\';   

    }
}   
    return $classes; 
} 


add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
此函数筛选nav_menu_css_class 所使用的Walker_Nav_Menu.

https://core.trac.wordpress.org/browser/tags/4.1/src/wp-includes/nav-menu-template.php#L427

上面的过滤器适用于默认的分类法“category”,但我们可能必须遍历所有当前的post分类法才能捕获自定义分类法。如果您只需要一种分类法,那么它会更简单。我还在为自定义分类法制定解决方案。。。

结束

相关推荐

Execute php in pages

我需要在wordpress中执行我的个人php代码来打印mysql数据库中的数据。我只能在页面上执行。我的想法是创建一个文件页pagename。php,复制页面主体。php模板并更改此代码:<?php while ( have_posts() ): the_post(); ?> <article <?php post_class(\'group\'); ?>> <?php get_temp