自定义支柱类型不会在菜单导航中突出显示

时间:2012-03-30 作者:boomturn

在戏剧活动现场工作。该结构需要几个单独的事件区域,每个区域都有一个顶部页面,列出特定区域中的事件,并在列表页面下方有相应的单独事件页面。由于每个事件区域页面需要不同的处理方式,我认为这对于自定义帖子类型来说是一个很好的情况,可以为每个区域使用单-[事件]和存档-[事件]模板。

我安装了自定义帖子类型UI来生成自定义帖子类型(包括匹配的自定义分类法),并安装了高级自定义字段来生成元字段。到目前为止还不错。存档自定义帖子类型(区域事件的完整列表)从单个自定义帖子类型中提取meta,两个自定义帖子页面都能正确显示,但有一点除外:主导航菜单不再突出显示存档列表上的活动网页。[注:有许多帖子介绍了如何突出显示子菜单单个自定义帖子以匹配父项;我不需要这样做,只需要在主菜单导航中正确突出显示当前事件区域!]

我意识到我已经用wp\\u nav\\u菜单和register\\u nav\\u菜单构建了我的主导航(包括活动区域)。因此,与存档自定义帖子相对应的事件区域最初构建为页面,主导航是使用WP菜单的拖放功能设置的。Wordpress正确地默认为存档-[事件]自定义帖子模板(并忽略同名的现有页面),导航菜单在链接方面起作用,但不会在导航中突出显示存档自定义帖子链接。主导航中的页面工作正常。

当我检查事件区域的输出时,有一个“current\\u page\\u parent”类附加到博客导航,但其他地方没有“current menu item”,我想这是适合自定义帖子的。我想,如果wp\\u nav\\u菜单仅用于页面,这是有意义的,因为顶级存档帖子不会被识别,但我不知道如何修复它。我愿意尝试黑客,但如果可能的话,我想避免ID特定的或jQuery。一种想法是丢弃归档-[事件]模板,并为列表使用常规页面模板,同时保留真正的单-[事件]自定义类型帖子。有没有理由假装这样做行不通?谢谢你的建议,希望我错过了明显/简单的方法。

3 个回复
最合适的回答,由SO网友:Ray Gulick 整理而成

我一直认为这是一个bug,但如果不是,那就相当令人不安了。您有两件事需要解决:第一件事是不要突出显示“Blog”顶级项目,第二件事是突出显示您的单个CPT所在的相应顶级项目。

可能还有其他方法,但我将与大家分享我的方法,不幸的是,它确实以CSS作为菜单ID的目标。

在nav容器中,添加一个条件,用于标识nav何时显示在单个CPT上:

<nav class="navsf<?php if (is_singular(\'news\')) { echo \' fixhilite\'; } ?>">

然后需要获取“Blog”菜单项和CPT父菜单项的id(在本例中为“News”)。假设“博客”的内容如下:

<li id="menu-item-29" ...>

对于“新闻”,它是:

<li id="menu-item-30" ...>

在CSS中,您可以像这样针对这些项目来更改文本或背景颜色,从而相应地突出显示/取消突出显示内容:

.navsf.fixhilite li#menu-item-29

.navsf.fixhilite li#menu-item-30

SO网友:D.A.H

你的问题可能早就解决了。无论如何,以下是可能的解决方案:

public static function WPFilter_UpdateNavMenuCSS($classes, $item) {
    $pages = get_posts ( array (
                                \'post_type\' => \'page\', 
                                \'meta_key\' => \'_wp_page_template\', 
                                \'meta_value\' => \'page-works.php\' ) );
    if (is_array ( $pages ) && count ( $pages ) > 0) {
        $root_page = $pages [0];
        if (is_singular ( self::id )) {
            if (( int ) $root_page->ID == ( int ) $item->object_id) {
                $classes [] = \'current_page_parent\';
            } else {
                $key = array_search ( \'current_page_parent\', $classes );
                if ($key) {
                    unset ( $classes [$key] );
                }
            }
        }
    }
    return $classes;
}
只需根据需要修改此方法。你必须替换页面作品。php和self:id。

对于下一步,您必须注册过滤器以调用上面定义的方法:

add_filter ( \'nav_menu_css_class\', \'SimpleTheme\\PostType\\Portfolio::WPFilter_UpdateNavMenuCSS\', 10, 2 );
此解决方案要求您有一个自定义页面模板来显示自定义帖子类型的列表,并为要定义为父页面的页面选择此模板。

SO网友:JI-Web

我建议使用jQuery,如:

<?php if(is_singular(\'your-custom-post-type\')) : ?>

    <script>
        (function($) {
        $(document).ready(function() {   
            $(\'#menu-item-20\').addClass(\'current-menu-item\');
        });
        })(jQuery);
    </script>

<?php endif; ?>
完成。

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph