是否将自定义“当前菜单项”类添加到导航?

时间:2015-11-19 作者:speedypancake

我使用以下代码强制我的wordpress导航反映当前帖子的类别。

它工作得很好,但我需要帮助将此功能扩展到不止一个类别和菜单项。尝试复制整个代码,但使用不同的类别和菜单项,但wordpress会像预期的那样抛出“已声明”错误。

非常感谢您的帮助或建议。。

add_filter( \'nav_menu_css_class\', \'add_custom_class\', 10, 2 );

function add_custom_class( $classes = array(), $menu_item = false ) {
    if ( is_single() && in_category( \'Services\' ) && 1633 == $menu_item->ID && ! in_array( \'current-menu-item\', $classes ) ) {
        $classes[] = \'current-menu-item\';
    }
    return $classes;
}

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

您声明了相同的函数名,这就是“声明的错误”的原因。只需更改类函数(包括在过滤器挂钩中)。或者您可以扩展您的函数代码。我还将重写if结构,使其更易于阅读:

add_filter( \'nav_menu_css_class\', \'add_custom_class\', 10, 2 );

function add_custom_class( $classes = array(), $menu_item = false ) {

    //Check if already have the class
    if (! in_array( \'current-menu-item\', $classes ) ) {

        //Check if it\'s the ID we\'re looking for
        if ( 1633 == $menu_item->ID ) {

            //Check if is in a single post
            if ( is_single() ) {

                //Check if the single post is in the category
                if ( in_category( \'Services\' ) ) {

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

                }

            }

        } elseif ( 1634 == $menu_item->ID ) {

            //Check if is in a single post
            if ( is_single() ) {

                //Check if the single post is in the category
                if ( in_category( \'Products\' ) ) {

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

                }

            }

        }

    }

    return $classes;
}
此外,此代码几乎是非动态的,因为必须指定菜单ID和类别名称。如果我理解了你的菜单逻辑,那么你是在试图将“当前菜单项”添加到一个类别菜单中,而一篇文章有这个类别。我会编写类似的代码:(因此它适用于任何类别和帖子组合):

add_filter( \'nav_menu_css_class\', \'add_custom_class\', 10, 2 );

function add_custom_class( $classes = array(), $menu_item = false ) {

    //Check if already have the class
    if (! in_array( \'current-menu-item\', $classes ) ) {

        //Check if it\'s a category
        if ( \'category\' == $menu_item->object ) {

            //Check if the post is in the category
            if ( in_category( $menu_item->ID ) ) {

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

            }

        }

    }

    return $classes;
}

相关推荐

Add extra markup to WP menus

我被要求将一个HTML网站重新开发为一个WP主题,它有一个非常高级的菜单结构,我不太确定如何复制它。第二个菜单项有一个子菜单,但它不仅仅是“li”中的“ul”,还有额外的div等。。因为下拉列表有3列布局,其中2列包含子链接,第3列包含内容。这是一个示例:<ul class=\"nav navbar-nav three\"> <li class=\"dropdown yamm-fw\"> <a href=\"#\" class=\"dropdown-toggl