从body_class中删除类


17

我不需要像这样的整个类的混乱...

<body class="page page-id-829 page-template page-template-page-template-portfolio-php portfolio">

我想要这样的东西...

<body class="portfolio">

某处是否有包含所有类列表的过滤器片段,然后我可以取消注释我不想在body类中看到的内容。

谢谢。


真正的问题是您为什么要这样做?拥有这些额外的类对事物的宏大计划无关紧要,并且如果以后要引用它们,则最好将它们用于样式。
奥托

3
@Otto-我可以完全理解她/他。如果您要尝试在例如中添加类。萤火虫,那真的很难解决。FF通常是错误的,并且是您在视口之外编写的类名。在开发人员自己期间,我关闭了大量的上课和下课课程-这使生活变得更轻松。
kaiser

嗯,是的,我不使用Firebug。它的接口是令人讨厌的。
奥托

Answers:


31

您可以$whitelist在此函数中配置数组以过滤掉所有其他不需要的类。

add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

function wpse15850_body_class( $wp_classes, $extra_classes ) {

    // List of the only WP generated classes allowed
    $whitelist = array( 'portfolio', 'home', 'error404' );

    // Filter the body classes
    $wp_classes = array_intersect( $wp_classes, $whitelist );

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}

15

只是@Geert答案的补充(也添加了黑名单):)

请将@Geert的答案标记为解决方案(不是此解决方案)非常好。

function wpse15850_body_class( $wp_classes, $extra_classes )
{
    // List of the only WP generated classes allowed
    $whitelist = array( 'home', 'blog', 'archive', 'single', 'category', 'tag', 'error404', 'logged-in', 'admin-bar' );

    // List of the only WP generated classes that are not allowed
    $blacklist = array( 'home', 'blog', 'archive', 'single', 'category', 'tag', 'error404', 'logged-in', 'admin-bar' );

    // Filter the body classes
    // Whitelist result: (comment if you want to blacklist classes)
    $wp_classes = array_intersect( $wp_classes, $whitelist );
    // Blacklist result: (uncomment if you want to blacklist classes)
    # $wp_classes = array_diff( $wp_classes, $blacklist );

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}
add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

尽管这是一个很好的工作解决方案,但我仍然发现将“ no-js”作为一个类添加
henrywright 2014年

1
关于no-js类-我认为这可能是BuddyPress的事情。我会调查的!
henrywright 2014年

1
no-js或同样js通常使用javascript / jquery处理,所以我猜想它是您需要出队的脚本
Bryan Willis

no-js将由服务器添加,但如果允许在浏览器上运行javascript,则将其与脚本一起删除。
戴维

4

<?php body_class(); ?>如果您不需要模板标记,我建议您仅省略模板标记。

只需将class="portfolio"硬编码应用到<body>标签中即可。


如果您想在wp.org仓库中托管主题,那么就没有这个选择了(只是一个旁注)。
kaiser

1
大声笑,我知道...我已经审查了WPORG存储库的一个或两个主题。:)不过,我从问题中假设,该主题仅供个人使用,而不是一般的公共发行。
Chip Bennett

2

只需将要删除的CSS的类放在$ class_delete中

add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

function wpse15850_body_class( $wp_classes, $extra_classes ) {

    # List tag to delete
    $class_delete = array('tag');

    # Verify if exist the class of WP in $class_delete
    foreach ($wp_classes as $class_css_key => $class_css) {
        if (in_array($class_css, $class_delete)) {
            unset($wp_classes[$class_css_key]);
        }
    }

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}

1

这将为每个页面提供仅“投资组合”的正文类。第一个参数是通常会出现的所生成主体类的数组。第二个参数是传递给body类函数的类的数组(例如,body_class('portfolio');将在此函数中作为第二个参数array( 'portfolio' ))。

function wpse15850_body_classes( $classes, $class ){
    return array( 'portfolio' );
}

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );

1
Try the following...

function var_template_include( $t ){
    $basename = basename($t);
    $templatename = substr($basename, 0,strrpos($basename,'.')); 
    $GLOBALS['current_theme_template'] = $templatename;

    return $t;
}
add_filter( 'template_include', 'var_template_include', 1000 );


function current_template( $echo = false ) {
    if( !isset( $GLOBALS['current_theme_template'] ) ) {
        return false;
    } if( $echo ) {
        echo $GLOBALS['current_theme_template'];
    } else {
        return  $GLOBALS['current_theme_template'];
    }   
}

function body_template_as_class() {
echo 'class="'.current_template().'"';
}

1
function alpha_remove_class($wp_classes){
  unset( $wp_classes[ array_search( "first_class", $wp_classes ) ] );

  return $wp_classes;
}
add_filter( 'body_class', 'alpha_remove_class' );

欢迎使用WordPress Stack Exchange!您能否使用上方的编辑链接编辑答案,并解释该代码的作用,将代码放置在何处以及与之前发布的答案有何不同或更好?通常不建议使用代码答案,而无需任何解释。
Howdy_McGee

0

如果您只想从body Tag中删除特定的类,则应执行以下操作:

add_filter('body_class','remove_body_class',20,2);

函数remove_body_class($ wp_classes){
    foreach($ wp_classes as $ key => $ value)
        {
            if($ value =='portfolio')未设置($ wp_classes [$ key]); //替换“投资组合”并将其删除
        }

    返回$ wp_classes;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.