Добавить класс в Wordpress Menu - PullRequest
0 голосов
/ 06 апреля 2019

Я добавляю классы к каждому пункту меню Wordpress, но они не появляются в коде.

Мое меню:

<?php $wp_custom_nav = array(
        'theme_location'  => 'primary',
    'container'       => 'nav',
        'container_class' => 'nav',
    'echo'            => false,
    'fallback_cb'     => false,
    'items_wrap'      => '%3$s',
    'depth'           => 0
    );
    echo strip_tags(wp_nav_menu( $wp_custom_nav ), '<nav><a>');
    ?>

Мой файл function.php включает

    register_nav_menus( array(
        'primary' => esc_html__( 'Primary', 'yewtree' ),
    ) );

Итак, у меня есть

<nav>
  <a></a>
  <a></a>
  ...
</nav>

, но у меня нет класса, который я добавил в меню администрирования Wordpress.Почему это?

1 Ответ

0 голосов
/ 07 апреля 2019

wp_nav_menu использует Walker_Nav_Menu по умолчанию.И эта часть отвечает за печать классов:

    /**
     * Filters the CSS classes applied to a menu item's list item element.
     *
     * @since 3.0.0
     * @since 4.1.0 The `$depth` parameter was added.
     *
     * @param string[] $classes Array of the CSS classes that are applied to the menu item's `<li>` element.
     * @param WP_Post  $item    The current menu item.
     * @param stdClass $args    An object of wp_nav_menu() arguments.
     * @param int      $depth   Depth of menu item. Used for padding.
     */
    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args, $depth ) );
    $class_names = $class_names ? ' class="' . esc_attr( $class_names ) . '"' : '';

    /**
     * Filters the ID applied to a menu item's list item element.
     *
     * @since 3.0.1
     * @since 4.1.0 The `$depth` parameter was added.
     *
     * @param string   $menu_id The ID that is applied to the menu item's `<li>` element.
     * @param WP_Post  $item    The current menu item.
     * @param stdClass $args    An object of wp_nav_menu() arguments.
     * @param int      $depth   Depth of menu item. Used for padding.
     */
    $id = apply_filters( 'nav_menu_item_id', 'menu-item-' . $item->ID, $item, $args, $depth );
    $id = $id ? ' id="' . esc_attr( $id ) . '"' : '';

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

Итак, как вы можете видеть, классы применяются к тегам <li>, а не к тегам <a>.

Таким образом, они применяются, но затем ... Вы делаете это:

echo strip_tags(wp_nav_menu( $wp_custom_nav ), '<nav><a>');

Таким образом, вы удаляете все теги, кроме <nav> и <a> - так что теги <li> удаляются (и классыушли тоже).

...