我有wordpress菜单:
<?php
wp_nav_menu( array(
\'theme_location\' => \'menu-categorias\',
\'container\' => \'ul\',
\'menu_class\' => \'navbar-nav dragscroll\' ) );
?>
其输出:
<ul id="menu-menu-categorias" class="navbar-nav dragscroll">
<li id="menu-item-8" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8 nav-item fadeIn">
<a href="http://website.test/category/ux/" class="nav-link">Ux</a>
</li>
<li id="menu-item-9" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9 nav-item fadeIn">
<a href="http://website.test/category/editorial/" class="nav-link">Editorial</a>
</li>
</ul>
我想要
nav-items
替换为
#
并将类别的名称(小写)添加到
li
班因此,菜单输出应如下所示:
<ul id="menu-menu-categorias" class="navbar-nav dragscroll">
<li id="menu-item-8" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8 nav-item fadeIn ux">
<a href="#ux" class="nav-link">Ux</a>
</li>
<li id="menu-item-9" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9 nav-item fadeIn editorial">
<a href="#ux" class="nav-link">Editorial</a>
</li>
</ul>
我尝试添加此内容,但没有任何更改:
function lb_menu_anchors($items, $args) {
foreach ($items as $key => $item) {
if ($item->object == \'custom\' && substr($item->url, 0, 1) == \'#\') {
$item->url = site_url() . $item->url;
}
}
return $items;
}
add_filter(\'wp_nav_menu_objects\', \'lb_menu_anchors\', 10, 2);
实现这两件事有什么帮助吗?
最合适的回答,由SO网友:Sally CJ 整理而成
我想要nav-items
替换为#
您可以使用nav_menu_link_attributes
hook 设置自定义href
类似这样的值:
add_filter( \'nav_menu_link_attributes\', function ( $atts, $item, $args ) {
if ( \'menu-categorias\' === $args->theme_location && \'category\' === $item->object ) {
$atts[\'href\'] = \'#\' . get_term_field( \'slug\', $item->object_id );
}
return $atts;
}, 10, 3 );
并将类别的名称(小写)添加到
li
班
对于这一点,您可以使用nav_menu_css_class
hook 其中;“名称”;以下是术语/类别slug:
add_filter( \'nav_menu_css_class\', function ( $classes, $item, $args ) {
if ( \'menu-categorias\' === $args->theme_location && \'category\' === $item->object ) {
$classes[] = get_term_field( \'slug\', $item->object_id );
}
return $classes;
}, 10, 3 );
注意,在我的示例中,我检查了
theme_location
是
menu-categorias
, 我还假设您的菜单项是所有类别(即
category
分类学)。
替代解决方案
通过扩展
Walker_Nav_Menu
class 并编辑
start_el()
方法生成
li
元素输出(
<li><a></a></li>
). 看一个例子
here.