【问题标题】:WordPress - How to add class to top level nav links onlyWordPress - 如何仅将类添加到顶级导航链接
【发布时间】:2019-06-27 23:27:32
【问题描述】:

我正在尝试在 WordPress 中创建以下菜单:

<ul class="nav navbar-nav navbar-right">
    <li class="dropdown submenu">
       <a href="#" class="dropdown-toggle nav-active">Link</a>
    </li>
    <li class="dropdown submenu">
       <a href="#" class="dropdown-toggle">Link</a>
    </li>
    <li class="dropdown submenu">
       <a href="#" class="dropdown-toggle">Link</a>
    </li>
    <li class="dropdown submenu">
       <a href="#" class="dropdown-toggle">Link</a>
         <ul class="dropdown-menu other_dropdwn">
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
         </ul>
    </li>
    <li class="dropdown submenu">
        <a href="#" class="dropdown-toggle">Link</a>
         <ul class="dropdown-menu other_dropdwn">
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
            <li><a href="#">Link</a></li>
         </ul>
    </li>
    <li class="dropdown submenu">
        <a href="#" class="dropdown-toggle">Link</a>
         <ul class="dropdown-menu">
           <li><a href="#">Link</a></li>
           <li><a href="#">Link</a></li>
           <li><a href="#">Link</a></li>
           <li><a href="#">Link</a></li>
         </ul>
    </li>
    <li><a href="#">Link</a></li>

到目前为止,这就是我想出的......

菜单本身嵌入在我的 header.php 中

<?php 
    wp_nav_menu( array(
    'theme_location' => 'primary-menu',
    'menu' => 'primary-menu',
    'container' => false,
    'container_class' => false,
    'container_id' => false,
    'menu_class' => 'nav navbar-nav navbar-right',
    'menu_id' => false,
    'depth' => 0,));
?>

我的functions.php 页面

//Load Custom Menu Navigation
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
    register_nav_menus(
        array(
            'primary-menu' => __( 'Primary Menu' ),
        )
    );
}

//Clean up Custom Menu by Removing Unecessary Tags
add_filter( 'nav_menu_item_id', 'wp_nav_menu_attributes_filter', 100, 1 );
add_filter( 'page_css_class', 'wp_nav_menu_attributes_filter', 100, 1 );
add_action( 'init', 'wp_nav_menu_attributes_filter' );
function wp_nav_menu_attributes_filter( $var ) {
    return is_array( $var ) ? array_intersect( $var, array( 'current-menu-item' ) ) : '';
}

//Remove Unecessary <li> Classes
add_filter( 'nav_menu_css_class', 'my_nav_menu_css_class' );
function my_nav_menu_css_class( $classes ) {
    $custom_classes = array();

    foreach ( $classes as $class ) {

        if ( $class == 'menu-item' ) {
            return $custom_classes;
        }
        $custom_classes[] = $class;
    }
}

//Add Custom Class to Navigation <a> Tags
add_filter( 'nav_menu_link_attributes', 'add_class_anchor_nav_primary', 10, 3 );
function add_class_anchor_nav_primary( $atts, $item, $args ) {
    //Check for Location of Menu
    if ( $args->theme_location == 'primary-menu' ) {
        // Add the Class
        $atts['class'] = 'dropdown submenu';
    }

    return $atts;
}

这是将类添加到每个标签,而我只需要它们位于链接的第一层,而不是下拉的子菜单项。任何意见都将不胜感激,TIA!

【问题讨论】:

    标签: javascript html wordpress


    【解决方案1】:

    问题在于primary-menu 是完整的顶部菜单,因此这不适用于您的菜单项。试试这个:

    add_filter( 'nav_menu_link_attributes', 'add_class_anchor_nav_primary', 10, 3 );
    function add_class_anchor_nav_primary( $atts, $item, $args ) {
        if ( (int) $item->menu_item_parent === 0 ) {
            $class         = 'dropdown submenu';
            $atts['class'] = $class;
        }
    
        return $atts;
    }
    

    这会将您的课程添加到除下拉链接之外的所有主要链接。它之所以有效,是因为我们正在检查给定项目是否有父项。如果不是(=== 0),我们可以说这是一个非下拉链接。我已经测试过了,它可以工作。

    【讨论】:

    • 所以这非常适合我的问题,但它也带来了另一个问题。现在子菜单
        有一个“子菜单”类。我需要将其更改为“下拉菜单”。想法?
    • 这总是类子菜单,因为它是一个子菜单。您想更改课程还是仅添加您需要的课程就足够了?
    • 我想完全改变课程。我认为这是 wordpress 子菜单的默认类。我需要一个自定义的walker吗?或者我们可以在函数中轻松更改它吗?
    • 您可以在我们的函数中添加另一个语句。请为此写一个简短的问题,因为在 SO 上,我们为一个主题创建一个问题并在此处发布链接。我会尝试添加这个。
    • 太棒了,我继续发了另一个帖子来回答这部分问题,但我只能发布 90 分钟,所以我将不得不等待。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多