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

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

我想要这样的东西...

<body class="portfolio">

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

评论

真正的问题是您为什么要这样做?拥有这些额外的类对事物的宏大计划无关紧要,并且如果以后要引用它们,则最好将它们用于样式。
@Otto-我可以完全理解她/他。如果您要尝试在例如中添加类。萤火虫,那真的很难解决。 FF通常是错误的,并且是您在视口之外编写的类名。在开发人员自己期间,我关闭了大量的上课和下课课程-这使生活变得更轻松。

嗯,是的,我不使用Firebug。它的界面很糟糕。

#1 楼

您可以在此函数中配置$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 );
}


#2 楼

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

评论


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

– henrywright
2014年1月27日12:07



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

– henrywright
2014年1月27日12:36

通常使用javascript / jquery处理no-js或类似的js,所以我猜测这是您需要出队的脚本

–布莱恩·威利斯(Bryan Willis)
2015年12月19日,下午3:35

服务器将添加no-js,但如果允许在浏览器上运行javascript,则会使用脚本将其删除。

–戴维
19年4月30日在8:10

#3 楼

如果您不需要<?php body_class(); ?>模板的输出,我建议只省略它。

只需将硬编码的class="portfolio"应用于<body>标记即可。

评论


如果您想在wp.org存储库中托管主题,则无需选择(仅作旁注)。

– kaiser
11年4月28日在23:46

大声笑,我知道...我已经审查了WPORG存储库的一个或两个主题。 :)尽管如此,我还是以为这个主题是供个人使用,而不是一般的公共发行。

–芯片Bennett
11年4月29日在0:51

#4 楼

只需将要删除的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 );
}


#5 楼

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

#6 楼

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().'"';
}


#7 楼

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♦
18/09/5在21:34

#8 楼

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

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

function remove_body_class($wp_classes) {
    foreach($wp_classes as $key => $value)
        {
            if ($value == 'portfolio') unset($wp_classes[$key]); //  Replaces "portfolio" and removes it
        }

    return $wp_classes;
}