问题描述

我不需要像这样的整个班级

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

我想要这样的东西

<body class="portfolio">

有没有一个过滤器片段有一个列表的所有类,然后我可以只是取消注释我不想看到在 body 类中的东西。

谢谢。

最佳解决方案

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

次佳解决方案

只是加上 @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 );

第三种解决方案

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

只需将 class="portfolio" hard-coded 应用于<body> 标签。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。