Usuń klasy z body_class


17

Nie potrzebuję tego całego bałaganu takich klas ...

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

Chciałbym coś takiego ...

<body class="portfolio">

Czy jest gdzieś fragment filtru, który ma listę wszystkich klas, a następnie mogę odkomentować rzeczy, których nie chcę widzieć w klasie ciała.

Dzięki.


Prawdziwe pytanie brzmi: dlaczego chcesz to zrobić? Posiadanie tych dodatkowych klas nie ma znaczenia w wielkim schemacie rzeczy i fajnie jest mieć je do stylizacji, jeśli chcesz je później odwoływać.
Otto

3
@Otto - mogę w pełni ją zrozumieć. Jeśli zamierzasz pobawić się dodając zajęcia np. firebug, wtedy naprawdę trudno sobie z tym poradzić. FF jest często błędny, a nazwa klasy, którą piszesz poza oknem ekranu. W trakcie projektowania wyłączam wiele zajęć post-body i body - to ułatwia życie.
kaiser

Ahh, tak, nie używam Firebuga. Jego interfejs jest godny ubolewania.
Otto

Odpowiedzi:


31

Możesz skonfigurować $whitelisttablicę w tej funkcji, aby odfiltrować wszystkie inne niechciane klasy.

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

Tylko dodatek do odpowiedzi @Geert (dodano też czarną listę) :)

Proszę tak miło zaznaczyć odpowiedź @Geert jako rozwiązanie (nie tę).

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

Chociaż bardzo dobre rozwiązanie działa, wciąż uważam, że „no-js” jest dodawane jako klasa
henrywright

1
Jeśli chodzi o klasę no-js - myślę, że może to być BuddyPress. Zbadam!
henrywright

1
no-jslub podobnie jssą zwykle używane przy użyciu javascript / jquery, więc zgaduję, że był to skrypt, który należy usunąć z listy
Bryan Willis

no-jszostanie dodany przez serwer, ale usunięty za pomocą skryptu, jeśli javascript może działać w przeglądarce.
Davey

4

Polecam po prostu pominąć <?php body_class(); ?>tag szablonu, jeśli nie potrzebujesz jego danych wyjściowych.

Po prostu zastosuj class="portfolio"zakodowane na stałe w <body>tagu.


jeśli chcesz hostować swój motyw na repozytorium wp.org, to nie masz tego wyboru (tylko sidenote).
kaiser

1
LOL, wiem ... Przejrzałem jeden lub dwa Tematy dla repozytorium WPORG. :) Jednak z pytania wywnioskowałem, że ten motyw jest przeznaczony do użytku osobistego, a nie ogólnej dystrybucji publicznej.
Chip Bennett

2

Po prostu umieść klasy swojego css, które chcesz usunąć w $ 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

Dzięki temu każda strona będzie miała klasę „tylko” portfolio. Pierwszy argument to tablica wygenerowanych klas treści, które normalnie by się pojawiły. Drugi argument jest tablicą klas przekazanych do funkcji klasy ciała (np. body_class('portfolio');Zrobiłby drugi argument w tej funkcji 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' );

Witamy w WordPress Stack Exchange! Czy możesz zredagować swoją odpowiedź , korzystając z powyższego linku edycyjnego i wyjaśnić, co robi ten kod, gdzie umieścisz ten kod oraz jak różni się on lub jest lepszy od którejkolwiek z wcześniej opublikowanych odpowiedzi? Odpowiedzi tylko na kod są zwykle odradzane bez żadnego wyjaśnienia.
Howdy_McGee

0

Jeśli chcesz tylko usunąć określoną klasę z tagu body, powinieneś:

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

funkcja remove_body_class ($ wp_classes) {
    foreach ($ wp_classes as $ key => $ value)
        {
            if (wartość $ == „portfolio”) jest rozbrojona ($ wp_classes [$ klucz]); // Zastępuje „portfolio” i usuwa je
        }

    zwróć $ wp_classes;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.