Hapus kelas dari body_class


17

Saya tidak perlu kekacauan kelas seperti ini ...

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

Saya mau sesuatu seperti ini ...

<body class="portfolio">

Apakah ada cuplikan filter di suatu tempat yang memiliki daftar semua kelas dan kemudian saya dapat menghapus komentar hal-hal yang tidak ingin saya lihat di kelas tubuh.

Terima kasih.


Pertanyaan sebenarnya adalah mengapa Anda ingin melakukan itu? Memiliki kelas-kelas tambahan itu tidak masalah dalam skema besar hal, dan senang memiliki mereka untuk ditata, jika Anda ingin referensi mereka nanti.
Otto

3
@ Otto - saya dapat sepenuhnya memahami dia. Jika Anda akan bermain-main dengan menambahkan kelas di mis. pembakar, maka sangat sulit untuk menangani ini. FF sering buggy dan nama kelas yang Anda tulis keluar dari viewport. Saya mematikan banyak kelas post dan tubuh selama dev sendiri - itu membuat hidup lebih mudah.
kaiser

Ahh, ya, saya tidak menggunakan Firebug. Antarmukanya menyedihkan.
Otto

Jawaban:


31

Anda dapat mengonfigurasi $whitelistarray dalam fungsi ini untuk memfilter semua kelas yang tidak diinginkan lainnya.

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

Hanya tambahan jawaban @ Geert (menambahkan daftar hitam juga) :)

Harap sangat baik untuk menandai jawaban @ Geert sebagai solusi (bukan yang ini).

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 );

Meskipun solusi kerja yang sangat baik, saya masih menemukan 'no-js' ditambahkan sebagai kelas
henrywright

1
Mengenai kelas no-js - Saya pikir itu mungkin hal BuddyPress. Saya akan selidiki!
henrywright

1
no-jsatau juga jsbiasanya ditangani dengan menggunakan javascript / jquery, jadi saya kira itu adalah skrip yang harus Anda dequeue
Bryan Willis

no-jsakan ditambahkan oleh server, tetapi dihapus dengan skrip jika javascript diizinkan untuk berjalan di browser.
Davey

4

Saya akan merekomendasikan hanya menghilangkan <?php body_class(); ?>tag template, jika Anda tidak perlu untuk outputnya.

Cukup terapkan class="portfolio"hard-coded ke dalam <body>tag.


jika Anda ingin meng-host tema Anda di repo wp.org, maka Anda tidak memiliki choise ini (hanya sidenote).
kaiser

1
LOL, saya tahu ... Saya telah mengulas satu atau dua Tema untuk repositori WPORG. :) Saya berasumsi dari pertanyaan, bahwa Tema ini adalah untuk penggunaan pribadi, daripada umum, distribusi publik.
Chip Bennett

2

Cukup tempatkan kelas css Anda yang ingin Anda hapus di $ 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

Ini akan memberi setiap halaman satu kelas tubuh dari 'portofolio' saja. Argumen pertama adalah array kelas tubuh yang dihasilkan yang biasanya akan muncul. Argumen kedua adalah array kelas yang diteruskan ke fungsi kelas tubuh (mis. body_class('portfolio');Akan membuat argumen kedua dalam fungsi ini 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' );

Selamat datang di WordPress Stack Exchange! Bisakah Anda mengedit jawaban Anda , menggunakan tautan edit di atas dan menjelaskan apa yang dilakukan kode ini, di mana Anda akan meletakkan kode ini, dan bagaimana perbedaannya atau lebih baik daripada jawaban yang diposting sebelumnya? Kode hanya jawaban biasanya tidak disarankan tanpa penjelasan.
Howdy_McGee

0

Jika Anda hanya ingin menghapus kelas tertentu dari tubuh Tag Anda harus ke ini:

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

function remove_body_class ($ wp_classes) {
    foreach ($ wp_classes sebagai $ key => $ value)
        {
            if ($ value == 'portfolio') tidak disetel ($ wp_classes [$ key]); // Mengganti "portofolio" dan menghapusnya
        }

    mengembalikan $ wp_classes;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.