問題描述

我不需要像這樣的整個班級

<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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。