php - 如何通过删除所有属性来清理菜单 li,但为当前菜单项保留 `class="active"`?
问题描述
使用wordpress,制作简单的菜单;带有 li 的无序列表,并且不存在使 HTML 看起来更干净的属性。但是,活动 li(取决于用户所在的页面)应该有一个class="active"
.
我试过改变 in 的优先级add_filter
参数functions.php
。
这是删除类属性的第一个代码块。
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '';
}
这是第二个块,它与第一个块具有相同的钩子nav_menu_css_class
和相同的优先级参数10
。
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;
}
我想知道如何让我的 li 在活动页面上看起来像这样:
<li class="active"></li>
如果我删除add_filter('nav_menu_css_class', 'my_css_attributes_filter', 10, 1);
,则active
该类存在,但所有其他混乱:
<li class="menu-item menu-item-type-post_type_archive menu-item-object-news current-menu-item menu-item-42 active"> </li>
解决方案
谢谢04FS,这是有效的:
这将删除该id
属性。add_filter('nav_menu_item_id', 'my_css_attributes_filter', 10, 1); add_filter('page_css_class', 'my_css_attributes_filter', 10, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '';
}
这将删除属性的所有值,class
除了active
:
add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
function special_nav_class($classes, $item){
return in_array('current-menu-item', $classes) ? ['active'] : [];
}
推荐阅读
- azure - 带有 istio 服务网格的 gke 中的 Azure apim 网关
- java - 运行程序时处理停止
- python - 在 matplotlib 中标记热图行
- abap - 错误 FOR ALL ENTRIES 选择的 SQL 命令太大
- reactjs - Apollo MockedProvider 无法使用带有 onCompleted 的 useLazyQuery 返回数据
- immutability - 重新绑定的规则是什么?
- php - 价格前的高级自定义字段
- c++ - C++ 如何为 ID2D1Device3 调用 CreateDeviceContext
- android - Delphi - ANDROID - 错误无法创建 EGL PBuffer 表面。错误代码:12297
- java - 无法在 BST 中进行前序遍历