WordPress-如何仅将类添加到顶级导航链接

时间:2019-06-27 13:57:20

标签: javascript html wordpress

我正在尝试在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,我们将不胜感激!

1 个答案:

答案 0 :(得分:3)

问题在于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),我们可以说这是一个非下拉链接。我已经对其进行了测试,并且可以正常工作。