ลบคลาสออกจาก body_class


17

ฉันไม่ต้องการระเบียบเรียนทั้งหมดเช่นนี้ ...

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

ฉันต้องการสิ่งนี้ ...

<body class="portfolio">

มีตัวอย่างข้อมูลตัวกรองบางแห่งที่มีรายการของคลาสทั้งหมดและจากนั้นฉันสามารถยกเลิกการคอมเม้นต์สิ่งที่ฉันไม่ต้องการเห็นในคลาสของร่างกาย

ขอบคุณ


คำถามจริงคือทำไมคุณต้องการทำเช่นนั้น? การมีชั้นเรียนพิเศษเหล่านั้นไม่สำคัญในรูปแบบที่ยิ่งใหญ่ของสิ่งต่าง ๆ และเป็นเรื่องดีที่มีไว้สำหรับการจัดแต่งทรงผมหากคุณต้องการอ้างอิงในภายหลัง
อ็อตโต

3
@Otto - ฉันสามารถเข้าใจเธอ / เขา หากคุณกำลังจะเล่นกับการเพิ่มคลาสในเช่น firebug แล้วมันยากที่จะจัดการกับเรื่องนี้ FF มักจะบั๊กกี้และชื่อคลาสที่คุณเขียนจากวิวพอร์ต ฉันปิดคลาสโพสต์และร่างกายจำนวนมากในระหว่างการพัฒนาตัวเอง - มันทำให้ชีวิตง่ายขึ้น
ไกเซอร์

อ่าใช่ฉันไม่ได้ใช้ Firebug อินเทอร์เฟซของมันน่าเสียดาย
อ็อตโต

คำตอบ:


31

คุณสามารถกำหนดค่า$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 );
}

15

เป็นเพียงส่วนเพิ่มเติมของคำตอบ @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 );

แม้ว่าวิธีแก้ปัญหาการทำงานที่ดีมากฉันยังคงพบว่า 'no-js' ถูกเพิ่มเป็นชั้นเรียน
henrywright

1
เกี่ยวกับคลาส no-js - ฉันคิดว่ามันอาจเป็นเรื่องของ BuddyPress ฉันจะตรวจสอบ!
henrywright

1
no-jsหรือในทำนองเดียวกันjsมักจะจัดการกับการใช้ javascript / jquery ดังนั้นฉันเดาว่ามันเป็นสคริปต์ที่คุณจะต้องทำการ dequeue
Bryan Willis

no-jsจะถูกเพิ่มโดยเซิร์ฟเวอร์ แต่จะลบออกด้วยสคริปต์หาก javascript ได้รับอนุญาตให้ทำงานบนเบราว์เซอร์
ดาวี่

4

ฉันอยากจะแนะนำเพียงแค่ละเว้น<?php body_class(); ?>แท็กแม่แบบหากคุณไม่ต้องการออก

เพียงใช้class="portfolio"ฮาร์ดโค้ดลงใน<body>แท็ก


ถ้าคุณต้องการโฮสต์ธีมของคุณที่ wp.org repo คุณไม่มีตัวเลือกนี้ (แค่ sidenote)
ไกเซอร์

1
ฮ่า ๆ ฉันรู้ ... ฉันได้ตรวจสอบหนึ่งหรือสองธีมสำหรับที่เก็บ WPORG :) ฉันคิดว่าจากคำถามที่ว่าชุดรูปแบบนี้มีไว้สำหรับการใช้งานส่วนตัวมากกว่าการกระจายทั่วไป
Chip Bennett

2

เพียงวางคลาสของ 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 );
}

1

สิ่งนี้จะทำให้ทุก ๆ คลาสของเนื้อหา 'ผลงาน' เท่านั้น อาร์กิวเมนต์แรกคืออาร์เรย์ของคลาสเนื้อหาที่สร้างขึ้นซึ่งปกติจะปรากฏขึ้น อาร์กิวเมนต์ที่สองคืออาร์เรย์ของคลาสที่ส่งผ่านไปยังฟังก์ชันคลาส body (เช่นbody_class('portfolio');สร้างอาร์กิวเมนต์ที่สองในฟังก์ชันนี้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' );

ยินดีต้อนรับสู่ WordPress Stack Exchange! คุณช่วยแก้ไขคำตอบของคุณโดยใช้ลิงก์แก้ไขด้านบนและอธิบายว่าโค้ดนี้ทำอะไรคุณจะวางโค้ดนี้ไว้ที่ไหนและแตกต่างหรือดีกว่าคำตอบที่โพสต์ก่อนหน้านี้หรือไม่ รหัสคำตอบเท่านั้นมักจะหมดกำลังใจโดยไม่มีคำอธิบายใด ๆ
Howdy_McGee

0

หากคุณต้องการลบคลาสเฉพาะจากแท็ก body คุณควรทำสิ่งนี้:

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

ฟังก์ชัน remove_body_class ($ wp_classes) {
    foreach ($ wp_classes เป็น $ key => $ value)
        {
            if ($ value == 'portfolio') unset ($ wp_classes [$ key]); // แทนที่ "แฟ้มสะสมผลงาน" และลบออก
        }

    ส่งกลับ $ wp_classes;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.