查看自定义分类存档页面时保留导航菜单

时间:2015-02-25 08:53:31

标签: wordpress menu custom-post-type custom-taxonomy

在我的网站上,我添加了一个导航菜单,其中包含指向自定义分类法(“用法”)档案的链接。单击此类链接时,将按预期列出所有自定义帖子(«建筑物»)。当前菜单项(分类术语)已突出显示并且正常。

The custom taxonomy term "Wohnen" is highlighted, below is the list of the custom posts


菜单在菜单部分正常创建:

enter image description here


菜单代码如下:

$sub_nav = wp_nav_menu( array(
                            'start_depth'    => 1,
                            'theme_location' => 'mainMenu',
                            'menu_class'     => '',
                            'menu_id'        => '',
                            'container'      => '',
                            'items_wrap'     => '%3$s',
                            'walker'         => new Uruk_Sub_Menu_Walker()
                        ) );

walker类的代码非常简单:

  • 我只是将a - 元素包装在div - 元素中以保持2:1的比例 -
  • 我不想在li - 元素之后添加换行符。
  • 每当新级别开始或结束时,我都不会添加任何包装器

     /**
     * Menu-Walker für die Unternavigation
     *
     * Rechts neben dem Logo listet sich die Unternavigation auf
     *
     * @since 1.0
     */
    class Uruk_Sub_Menu_Walker extends Walker_Nav_Menu {

        /**
         * Item beginnen
         *
         * LI-Element für ein Navigationselement beginnen, mit eingemittetem
         * A-Element
         *
         * @since 1.0
         */
        function start_el( &$output, $item, $depth, $args ) {

            //$class_names = '';
            $classes = empty( $item->classes ) ? array() : (array) $item->classes;
            $classes[] = 'item-' . $item->ID;
            $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
            $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';

            $output .= '<li' . $class_names .'>';

            // link attributes
            $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
            $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
            $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
            $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

            $output .= '<div class="sub-nav-item-ratio"></div>';
            $output .= sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s',
                $args->before,
                $attributes,
                '<div class="link-text-height"></div><div class="link-text-wrapper">',
                apply_filters( 'the_title', $item->title, $item->ID ),
                '</div>',
                $args->after
            );
        }


        /**
         * Ende eines LI-Elements
         *
         * Diesmal ohne Newline
         */
        function end_el( &$output, $item, $depth = 0, $args = array() ) {
            $output .= '</li>';
        }


        /**
         * Flache Struktur
         *
         * Wenn eine weitere Hierarchieebene beginnt, diese nicht mit einer weiteren UL verschachteln
         */
        function start_lvl( &$output, $depth = 0, $args = array() ) { }
        function end_lvl( &$output, $depth = 0, $args = array() ) { }
    }

home- / news- / blog-page的设置如下:

enter image description here

“新闻”页面是没有任何内容的普通页面。

现在,当我想查看列出的自定义帖子类型的详细信息时,我丢失了菜单项,并切换到默认的博客菜单。

我能做什么:

  • 每当我在后端保存自定义帖子时,我都可以通过编程方式将其作为新的导航菜单项添加到它所属的所有自定义taxomomy-archive-menu-items(例如wp_update_nav_menu_object()),但是这会产生一个巨大的菜单,当选择一个单独的建筑时,会突出显示几个菜单项,这是不可取的。
  • 每当我点击详细信息按钮时,我都会通过AJAX加载相应的建筑物,以保持导航不变。但这似乎有点不洁净。此外,单个建筑物的永久链接将显示另一个导航。

那么,如何在查看单个建筑物时保留当前菜单项?一旦我保持菜单,我一定能够突出显示所请求的菜单。

我知道,这还不是一个与代码相关的精确问题,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

问题在于,您的单个自定义帖子(单个建筑物)的固定链接与分类存档的永久链接无关,因此wp_nav_menu无法知道单个构建页面与该​​菜单项相关。

我建议采用以下方法:

1)在您的分类档案的模板中,为每个单柱链接添加一个自定义查询参数,例如?customtax =分类法蛞蝓。

2)使用此特殊参数的存在使您的模板使用自定义Walker而不是默认的博客菜单

3)在你的自定义Walker中,如果存在这个特殊参数,则给出与该分类相对应的菜单项“current_page_item”。