【问题标题】:Adding classes to WP Genesis menu excluding other menu's向 WP Genesis 菜单添加类,不包括其他菜单
【发布时间】:2020-08-06 19:25:02
【问题描述】:

我们正在使用 WordPress 的 Genesis 主题,并希望在菜单中添加一些类。我们在网上搜索了一下,找到了这段代码:

// Add a CSS class to a menu or menu item in WordPress
function modify_nav_menu_args( $args) {
        $args['menu_class'] .= ' genesis-nav-menu js-superfish sf-js-enabled sf-arrows'; 
        return $args;
}
add_filter( 'wp_nav_menu_args', 'modify_nav_menu_args' );

效果很好,唯一的问题是我们在页脚中也有一个菜单,并且这个菜单正在获取这些类。

我们没有使用“二级”菜单的“主要”来加载菜单,而是通过小部件来完成。

如何使用上面的函数并添加一个 if 语句来表示我只想将此 css 添加到名称为“主菜单”和 ID 为“11”的菜单中。如果不是“主菜单”,或者如果你想通过 ID“11”来做,那么添加其他类。

我已经找到了类似的东西:

function modify_nav_menu_args( $args ) {
 if( 'primary' == $args['theme_location'] ) {
 $args['menu_class'] .= ' special-class';
   }
return $args;
}
add_filter( 'wp_nav_menu_args', 'modify_nav_menu_args' );

但是你使用了theme_location的“primary”,而我们没有使用“primary”或“secondary”。

有人可以帮我看看如何使用菜单名称或 ID 来做到这一点?

Var_dump $args

array(17) { ["menu"]=> object(WP_Term)#21050 (11) { ["term_id"]=> int(11) ["name"]=> string(9) "main menu" ["slug"]=> string(9) "main-menu" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(11) ["taxonomy"]=> string(8) "nav_menu" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["meta"]=> array(0) { } } ["container"]=> string(3) "div" ["container_class"]=> string(0) "" ["container_id"]=> string(0) "" ["menu_class"]=> string(4) "menu" ["menu_id"]=> string(0) "" ["echo"]=> bool(true) ["fallback_cb"]=> string(0) "" ["before"]=> string(0) "" ["after"]=> string(0) "" ["link_before"]=> string(0) "" ["link_after"]=> string(0) "" ["items_wrap"]=> string(36) "
%3$s
" ["item_spacing"]=> string(8) "preserve" ["depth"]=> int(0) ["walker"]=> string(0) "" ["theme_location"]=> string(0) "" }

【问题讨论】:

    标签: php wordpress function class menu


    【解决方案1】:

    $args 变量应该已经包含您需要的内容。

    function modify_nav_menu_args( $args ) {
        if ($args['menu'] instanceof WP_Term && 'main-menu' == $args['menu']->slug) {
            $args['menu_class'] .= ' genesis-nav-menu js-superfish sf-js-enabled sf-arrows';
        }
        return $args;
    }
    

    【讨论】:

    • 感谢您的快速响应。你说的有道理,但我试过了,现在根本没有添加任何课程。所以我猜if语句有问题。我已经用 $args['menu'] 和 $args['menu_id'] 单独尝试了它,但仍然没有添加任何类...我 100% 确定 ID 是 11,所以可能有什么问题?我们正在通过标题中的小部件加载菜单?也许这就是它不起作用的原因?
    • @user2812779 我不这么认为。我在答案中省略了return 语句,但过滤器必须返回一个值。你包括了吗?您是否尝试将$args 的内容转储到if 之外,以检查您想要的菜单是否正在通过?
    • 再次感谢您的回复。我在我创建的函数中添加了返回,所以不是这样。我在 $args 上做了一个 var_dump。我编辑了我的问题并添加了 var_dump。这对我来说似乎很好,但出于某种奇怪的原因,没有添加任何课程。还有其他想法吗?
    • @user2812779 修改为将分类法作为菜单传递。删除了 id 检查,我不认为你会需要它。如果这样做,请使用 term_taxonomy_id 添加另一个条件。
    • 我自己从来没有想到过这个!非常感谢!
    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 2014-10-12
    • 2017-08-17
    • 2021-11-29
    • 1970-01-01
    相关资源
    最近更新 更多