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.

agileapricot
sumber
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 );
}
Geert
sumber
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 );
kaisar
sumber
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.

Chip Bennett
sumber
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 );
}
Bryan Contreras
sumber
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 );
John P Bloch
sumber
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().'"';
}
Wok
sumber
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' );
saifulislam
sumber
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;
}
Nices Wölkchen
sumber