将类别添加到Wordpress菜单

时间:2019-04-06 10:11:08

标签: php wordpress nav

我向每个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 :(得分:0)

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>标签(并且类也消失了)。