Xóa các lớp khỏi body_group


17

Tôi không cần cả đống lớp học như thế này ...

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

Tôi muốn một cái gì đó như thế này ...

<body class="portfolio">

Có một đoạn lọc ở đâu đó có một danh sách tất cả các lớp và sau đó tôi có thể bỏ qua những thứ tôi không muốn thấy trong lớp cơ thể.

Cảm ơn.


Câu hỏi thực sự là tại sao bạn muốn làm điều đó? Có những lớp học thêm đó không thành vấn đề trong sơ đồ lớn của mọi thứ, và thật tuyệt khi có chúng để tạo kiểu, nếu bạn muốn tham khảo chúng sau này.
Otto

3
@Otto - tôi hoàn toàn có thể hiểu cô ấy / anh ấy. Nếu bạn sẽ chơi xung quanh với việc thêm các lớp trong ví dụ. Bọ lửa, thật khó để xử lý việc này. FF thường bị lỗi và tên lớp bạn đang viết ra khỏi khung nhìn. Tôi tự tắt rất nhiều lớp học sau và cơ thể trong suốt quá trình phát triển bản thân - nó giúp cuộc sống dễ dàng hơn.
kaiser

À, ừ, tôi không dùng Fireorms. Giao diện của nó là đáng trách.
Otto

Câu trả lời:


31

Bạn có thể cấu hình $whitelistmảng trong hàm này để lọc tất cả các lớp không mong muốn khác.

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

Chỉ là một bổ sung cho câu trả lời @Geert (cũng thêm một danh sách đen) :)

Xin vui lòng đánh dấu câu trả lời của @Geert là giải pháp (không phải câu trả lời này).

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

Mặc dù là một giải pháp hoạt động rất tốt, tôi vẫn thấy 'no-js' được thêm vào dưới dạng một lớp
henrywright

1
Về lớp không có js - tôi nghĩ đó có thể là một thứ BuddyPress. Tôi sẽ điều tra!
henrywright

1
no-jshoặc tương tự như vậy jsthường được xử lý bằng cách sử dụng javascript / jquery, vì vậy tôi đoán đó là một kịch bản mà bạn cần phải xử lý
Bryan Willis

no-jssẽ được thêm bởi máy chủ, nhưng bị xóa bằng tập lệnh nếu javascript được phép chạy trên trình duyệt.
Davey

4

Tôi khuyên bạn chỉ nên bỏ qua <?php body_class(); ?>thẻ mẫu, nếu bạn không có nhu cầu về đầu ra của nó.

Chỉ cần áp dụng class="portfolio"mã hóa cứng vào <body>thẻ.


nếu bạn muốn lưu trữ chủ đề của mình tại repo wp.org, thì bạn không có sự lựa chọn này (chỉ là một sidenote).
kaiser

1
LOL, tôi biết ... Tôi đã xem lại một hoặc hai Chủ đề cho kho lưu trữ WPORG. :) Tôi đã giả định từ câu hỏi, tuy nhiên, Chủ đề này là dành cho sử dụng cá nhân, thay vì phân phối chung, chung.
Chip Bennett

2

Chỉ cần đặt các lớp css của bạn mà bạn muốn xóa trong $ 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

Điều này sẽ cung cấp cho mỗi trang một lớp cơ thể chỉ có 'danh mục đầu tư'. Đối số đầu tiên là mảng các lớp cơ thể được tạo thường xuất hiện. Đối số thứ hai là một mảng các lớp được truyền vào hàm lớp cơ thể (ví dụ: body_class('portfolio');sẽ tạo đối số thứ hai trong hàm này 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' );

Chào mừng bạn đến với Sàn giao dịch WordPress! Bạn có thể vui lòng chỉnh sửa câu trả lời của mình , sử dụng liên kết chỉnh sửa ở trên và giải thích mã này làm gì, nơi bạn sẽ đặt mã này và cách khác hoặc tốt hơn bất kỳ câu trả lời nào được đăng trước đó không? Mã chỉ trả lời thường không được khuyến khích mà không có bất kỳ lời giải thích.
Howdy_McGee

0

Nếu bạn chỉ muốn xóa một lớp cụ thể khỏi Thẻ cơ thể, bạn nên làm điều này:

add_filter ('body_group', 'remove_body_group', 20, 2);

hàm remove_body_group ($ wp_groupes) {
    foreach ($ wp_groupes là $ key => $ value)
        {
            if ($ value == 'portfolio') unset ($ wp_groupes [$ key]); // Thay thế "danh mục đầu tư" và xóa nó
        }

    trả về $ wp_groupes;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.