移除 WordPress 菜单输出的多余的CSS选择器id或class

在使用wp_nav_menu() 添加菜单,会输出很多CSS选择器,比如下面的代码:




可以将下面的代码添加到主题的 functions.php,移除所有的css选择器

/**
 * 移除菜单的多余CSS选择器
 */
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
	return is_array($var) ? array() : '';
}

输出效果如下,够精简了吧:

  • WPMAKER
  • WordPress资讯
  • WordPress主题
  • 不过,你可能要考虑到定义当前菜单的某些样式,比如高亮显示当前菜单,那你就需要保留一些CSS选择器,才能定义当前菜单。常用的当前菜单的选择器有以下4个:

    • current-post-ancestor
    • current-menu-ancestor
    • current-menu-item
    • current-menu-parent

    所以我们只要不过滤它们即可,可以参考下面的代码:

    如果你想保留更多CSS类,可以修改以下代码的第 9 行的数组内容。

    /**
     * 移除菜单的多余CSS选择器
     * From https://www.wpmaker.com/remove-wordpress-nav-classes.html
     */
    add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
    add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
    add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
    function my_css_attributes_filter($var) {
    	return is_array($var) ? array_intersect($var, array('current-menu-item','current-post-ancestor','current-menu-ancestor','current-menu-parent')) : '';
    }
    

    这样一来,如果当前访问的是WPMAKER的首页,输出的代码为:

  • WPMAKER
  • WordPress资讯
  • WordPress主题
  • 保留了 class=“current-menu-item” ,对这个类添加样式即可。

    你可能感兴趣的:(wordpress)