如何在Wordpress中使用wp_nav_menu()在<li>中添加Class?

Ayy*_*far 36 wordpress

我正在使用wp_nav_menu($args),我想将my_own_classCSS类名添加到<li>元素中以获得以下结果:

<li class='my_own_class'><a href=''>Link</a>
Run Code Online (Sandbox Code Playgroud)

怎么做?

Ram*_*MRO 62

这里WordPress在wp_nav_menu链接中添加自定义类

或者您可以<li class='my_own_class'><a href=''>Link</a></li> 从管理面板添加课程 :

  1. YOURSITEURL/wp-admin/nav-menus.php

  2. 打开 SCREEN OPTIONS

  3. 选中CSS CLASSES,然后您将CSS Classes (optional) 在每个菜单链接中看到字段.

  • 这必须由最终用户完成。不是在主题中实施的解决方案。 (4认同)

小智 60

您可以nav_menu_css_class在functions.php文件中为操作添加过滤器.

例:

function atg_menu_classes($classes, $item, $args) {
  if($args->theme_location == 'secondary') {
    $classes[] = 'list-inline-item';
  }
  return $classes;
}
add_filter('nav_menu_css_class', 'atg_menu_classes', 1, 3);
Run Code Online (Sandbox Code Playgroud)

文档:https://developer.wordpress.org/reference/hooks/nav_menu_css_class/

  • 我知道此答案的发布时间要晚于所选答案的发布时间,但我认为应该将其标记为正确答案,因为它确实符合问题的要求。 (3认同)

Zun*_*nan 38

无需创建自定义助行器.只需使用其他参数并为nav_menu_css_class设置过滤器.

例如:

$args = array(
    'container'     => '',
    'theme_location'=> 'your-theme-loc',
    'depth'         => 1,
    'fallback_cb'   => false,
    'add_li_class'  => 'your-class-name1 your-class-name-2'
    );
wp_nav_menu($args);
Run Code Online (Sandbox Code Playgroud)

注意新的'add_li_class'参数.

并在functions.php上设置过滤器

function add_additional_class_on_li($classes, $item, $args) {
    if(isset($args->add_li_class)) {
        $classes[] = $args->add_li_class;
    }
    return $classes;
}
add_filter('nav_menu_css_class', 'add_additional_class_on_li', 1, 3);
Run Code Online (Sandbox Code Playgroud)

  • 不错的解决方案。如果我是OP,我会接受这个作为答案。 (2认同)
  • 最佳解决方案,但我需要修改它以避免错误“未定义的属性:stdClass::$item_class” **解决方案**: if(isset($args-&gt;item_class)) { ...etc (2认同)

Reg*_*ith 12

使用此过滤器nav_menu_css_class如下所示

function add_classes_on_li($classes, $item, $args) {
    $classes[] = 'nav-item';
    return $classes;
}
add_filter('nav_menu_css_class','add_classes_on_li',1,3);
Run Code Online (Sandbox Code Playgroud)

  • 尝试用 `if ( 'main-menu' === $args-&gt;theme_location ) { $classes[] = "nav-item"; 包裹 `$classes[] = "nav-item";` }` (3认同)

小智 8

将Class添加到<li>标记而不编辑functions.php文件:

  1. 转到外观 - >菜单 - >屏幕选项 - > CSS类
  2. 您将在Menu ItemsWindow中启用CSS Class选项

在此输入图像描述


Ami*_*min 6

str_replace如果您只想“添加类”,那么只使用函数怎么样:

<?php
    echo str_replace( '<li class="', '<li class="myclass ',
        wp_nav_menu(
            array(
                'theme_location'    => 'main_menu',
                'container'         => false,
                'items_wrap'        => '<ul>%3$s</ul>',
                'depth'             => 1,
                'echo'              => false
            )
        )
    );
?>
Run Code Online (Sandbox Code Playgroud)

对于单级菜单或要向所有<li>元素添加类的菜单来说,这是一种快速修复,但不建议用于更复杂的菜单


Enn*_*nui -26

您无法非常轻松地将类直接添加到 LI,但是有什么理由不以稍微不同但同样具体的方式(通过其父 ul)来定位它们?

您可以使用 menu_class 和 menu_id 参数(附加到 LI 的 UL 父级)设置菜单的类或 ID,然后通过 CSS 以这种方式定位 li,如下所示:

<?php wp_nav_menu('menu_id=mymenu'); ?>
Run Code Online (Sandbox Code Playgroud)

对于CSS:

ul#mymenu li {
    /* your styles here */
}
Run Code Online (Sandbox Code Playgroud)

编辑:在 2013 年撰写本文时,这是添加它的最简单方法,但此后的更新添加了直接在管理导航编辑器中添加 CSS 类的功能。有关详细信息,请参阅最近的答案。

  • 虽然我很欣赏提出解决方案的尝试,但这并不能回答问题。例如,就我而言,我需要应用 Bootstrap 4“col”类。 (5认同)
  • 这个答案是不正确的 - 请参阅其他赞成的答案以了解处理此问题的其他方法。 (2认同)