我正在尝试不带ul和li的wp菜单,并在元素中添加了一个类。
我试过在我的function.php
中添加它function add_menuclass($ulclass) {
return preg_replace('/<a /', '<a class="list-group-item"', $ulclass, 1);
}
add_filter('wp_nav_menu','add_menuclass');
在我的模板中,我有:
<?php
$menuParameters = array(
'menu' => 'Videos',
'container' => false,
'echo' => false,
'items_wrap' => '%3$s',
'depth' => 0,
);
echo strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
?>
但输出仅将类应用于第一项而不是所有<a>
按预期方式。
<div class="list-group">
<a class="list-group-item" href="#">First item</a>
<a href="#">Second item</a>
</div>
我正在尝试实现这一点,基本上将该类应用于我的所有项目(不知道为什么它只适用于一个) - 请不要jQuery。
<div class="list-group">
<a class="list-group-item" href="#">First item</a>
<a class="list-group-item" href="#">Second item</a>
</div>
答案 0 :(得分:21)
感谢Sergiu Paraschiv评论,问题涉及限制为1。
因此它应该在function.php中:
function add_menuclass($ulclass) {
return preg_replace('/<a /', '<a class="list-group-item"', $ulclass);
}
add_filter('wp_nav_menu','add_menuclass');
<强>更新强>
实际上有更好的方法可以让我们获得更多的控制权,而Jeff Starr在this post上提供了一段代码
注意:这不是添加当前类
在wp上创建菜单,然后记住在菜单编辑器中单击该位置,然后在您要执行的功能中单击:
// custom menu example @ https://digwp.com/2011/11/html-formatting-custom-menus/
function clean_custom_menus() {
$menu_name = 'nav-primary'; // specify custom menu name
if (($locations = get_nav_menu_locations()) && isset($locations[$menu_name])) {
$menu = wp_get_nav_menu_object($locations[$menu_name]);
$menu_items = wp_get_nav_menu_items($menu->term_id);
$menu_list = '<nav>' ."\n";
$menu_list .= "\t\t\t\t". '<ul>' ."\n";
foreach ((array) $menu_items as $key => $menu_item) {
$title = $menu_item->title;
$url = $menu_item->url;
$menu_list .= "\t\t\t\t\t". '<li><a href="'. $url .'">'. $title .'</a></li>' ."\n";
}
$menu_list .= "\t\t\t\t". '</ul>' ."\n";
$menu_list .= "\t\t\t". '</nav>' ."\n";
} else {
// $menu_list = '<!-- no list defined -->';
}
echo $menu_list;
}
最后我们可以调用我们的菜单:
<?php if (function_exists(clean_custom_menus())) clean_custom_menus(); ?>
上面的代码取自上面链接的帖子,我想包含这个答案,因为看起来这个问题有很多次访问。
更新2
另一种解决方案是(也许是最好的):
的header.php:
<?php
wp_nav_menu( array(
'theme_location' => 'topnav',
'menu' =>'topnav',
'container' => 'div',
'container_class' => 'collapse navbar-collapse',
'container_id' => 'navbarCollapse',
'menu_class' => 'menu',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'items_wrap' => '<ul class="nav justify-content-end w-100 %2$s">%3$s</ul>',
'depth' => 0
) );
?>
function.php:
// register the nav
function register_my_menu() {
register_nav_menu('topnav',__( 'topnav' ));
}
add_action( 'init', 'register_my_menu' );
// let's add "*active*" as a class to the li
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
if( in_array('current-menu-item', $classes) ){
$classes[] = 'active ';
}
return $classes;
}
// let's add our custom class to the actual link tag
function atg_menu_classes($classes, $item, $args) {
if($args->theme_location == 'topnav') {
$classes[] = 'nav-link';
}
return $classes;
}
add_filter('nav_menu_css_class', 'atg_menu_classes', 1, 3);
function add_menuclass($ulclass) {
return preg_replace('/<a /', '<a class="nav-link"', $ulclass);
}
add_filter('wp_nav_menu','add_menuclass');
答案 1 :(得分:4)
从this answer得到的提示(我发现这是将类添加到菜单的列表项中最简洁的提示),我使用了nav_menu_link_attributes过滤器,该过滤器非常适合添加类。
在您的functions.php中,添加:
function add_menu_link_class( $atts, $item, $args ) {
if (property_exists($args, 'link_class')) {
$atts['class'] = $args->link_class;
}
return $atts;
}
add_filter( 'nav_menu_link_attributes', 'add_menu_link_class', 1, 3 );
(可选)您可能希望添加选项以将类添加到列表项:
function add_menu_list_item_class($classes, $item, $args) {
if (property_exists($args, 'list_item_class')) {
$classes[] = $args->list_item_class;
}
return $classes;
}
add_filter('nav_menu_css_class', 'add_menu_list_item_class', 1, 3);
现在,在您的模板中,要构建菜单,您只需添加两个新参数,例如:
wp_nav_menu([
'theme_location'=> 'primary_navigation',
'menu_class' => 'navbar-nav ml-auto flex-nowrap',
'list_item_class' => 'nav-item',
'link_class' => 'nav-link m-2 menu-item nav-active'
]);
与具有不同外观的多个菜单的主题配合得很好。
答案 2 :(得分:1)
我要在li中添加“ item”类,应编写以下代码:
add_filter('nav_menu_css_class' , 'nav_class' , 10 , 2);
function nav_class($classes, $item){
$classes[] = 'item';
return $classes;
}
答案 3 :(得分:0)
我有向锚标记添加类的解决方案。
1:步骤:在functions.php中添加这个
function add_additional_class_on_a($classes, $item, $args)
{
if (isset($args->add_a_class)) {
$classes['class'] = $args->add_a_class;
}
return $classes;
}
add_filter('nav_menu_link_attributes', 'add_additional_class_on_a', 1, 3);
2:然后在你的主题中像这样使用
<?php
// Show Menu here
wp_nav_menu(array(
'theme_location' => 'my-footer-menu',
'container_id' => '',
'menu_class' => 'footer-top list-unstyled',
'menu_id' => '',
'add_a_class' => 'box-link text-dark',
));
?>
答案 4 :(得分:0)
我在上面添加了我的解决方案。或者,您可以使用 wordpress 仪表板向菜单项 li 添加一个类。
那么让我们开始吧:
步骤:1:
在 Menus
类别下的 Appearance
页面上。点击右上角的 Screen Options
。
步骤:2:
然后选中 CSS classes
复选框,
您将在导航菜单选项中看到 CSS classes
输入框。
步骤:3: 在此处添加您的自定义类,它将显示在前端。
谢谢:)
答案 5 :(得分:-2)
我的解决方案很简单,请使用我们的朋友jquery
在菜单中插入自定义menu_id
<?php
wp_nav_menu(array(
'theme_location'=>'primary',
'container'=>false,
'menu_class'=>'navbar-nav mr-auto',
'menu_id'=>'customAclassInWp_nav_menu'
)
);
?>
然后使用jquery注入缺少的类。
$( "#customAclassInWp_nav_menu li a" ).addClass( "nav-link" );
tadammmm:)
享受