Entfernen Sie Klassen aus body_class

17

Ich brauche das ganze Durcheinander von Klassen wie diese nicht ...

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

Ich hätte gerne so etwas ...

<body class="portfolio">

Gibt es irgendwo ein Filter-Snippet, das eine Liste aller Klassen enthält, und ich kann dann einfach die Kommentare entfernen, die ich in der Body-Klasse nicht sehen möchte.

Vielen Dank.

agileapricot
quelle
Die eigentliche Frage ist, warum möchten Sie das tun? Diese zusätzlichen Klassen zu haben, spielt im großen Stil keine Rolle, und es ist schön, sie für das Styling zu haben, wenn Sie sie später referenzieren möchten.
Otto
3
@Otto - ich kann sie / ihn voll verstehen. Wenn Sie mit dem Hinzufügen von Klassen in z. Firebug, dann ist es wirklich schwer damit umzugehen. FF ist oft fehlerhaft und der Klassenname, den Sie aus dem Ansichtsfenster schreiben. Ich selbst schalte viele Post- und Body-Klassen während des Entwickelns aus - das macht das Leben leichter.
Kaiser
Ahh, ja, ich benutze keinen Firebug. Die Schnittstelle ist bedauerlich.
Otto

Antworten:

31

Sie können das $whitelistArray in dieser Funktion so konfigurieren , dass alle anderen unerwünschten Klassen herausgefiltert werden.

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
quelle
15

Nur eine Ergänzung zu @Geert answer (hat auch eine schwarze Liste hinzugefügt) :)

Bitte sei so nett, die Antwort von @Geert als Lösung zu markieren (nicht diese).

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 );
Kaiser
quelle
Obwohl es eine sehr gute Lösung ist, finde ich immer noch, dass 'no-js' als Klasse hinzugefügt wurde
henrywright
1
In Bezug auf die No-Js-Klasse - ich denke, es könnte eine BuddyPress-Sache sein. Ich werde nachforschen!
Henrywright
1
no-jsoder jswerden in der Regel mit Javascript / jquery behandelt. Ich schätze, es war ein Skript, das Sie aus der Warteschlange nehmen müssen
Bryan Willis,
no-jswird vom Server hinzugefügt, aber mit einem Skript entfernt, wenn Javascript im Browser ausgeführt werden darf.
Davey
4

Ich würde nur empfehlen, das <?php body_class(); ?>Template-Tag wegzulassen , wenn Sie keine Ausgabe benötigen.

Wenden Sie einfach class="portfolio"fest codiert in das <body>Tag an.

Chip Bennett
quelle
Wenn Sie Ihr Theme im Repo von wp.org hosten möchten, haben Sie diese Wahl nicht (nur eine Randnotiz).
Kaiser
1
LOL, ich weiß ... Ich habe ein oder zwei Themen für das WPORG-Repository überprüft. :) Ich habe jedoch von der Frage ausgegangen, dass dieses Theme eher für den persönlichen Gebrauch als für die allgemeine öffentliche Verbreitung gedacht ist.
Chip Bennett
2

Platzieren Sie einfach die Klassen Ihres CSS, die Sie entfernen möchten, in $ 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
quelle
1

Dadurch erhält jede Seite eine Body-Class, die nur aus "Portfolio" besteht. Das erste Argument ist das Array generierter Body-Klassen, das normalerweise angezeigt wird. Das zweite Argument ist ein Array von Klassen, die an die Body-Class-Funktion übergeben werden (z. B. body_class('portfolio');würde es das zweite Argument in dieser Funktion ergeben array( 'portfolio' )).

function wpse15850_body_classes( $classes, $class ){
    return array( 'portfolio' );
}

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
John P Bloch
quelle
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
quelle
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
quelle
Willkommen bei WordPress Stack Exchange! Könnten Sie bitte Ihre Antwort unter Verwendung des obigen Bearbeitungslinks bearbeiten und erklären, was dieser Code bewirkt, wo Sie diesen Code ablegen würden und wie er sich von den zuvor veröffentlichten Antworten unterscheidet oder besser ist? Antworten, die nur aus Code bestehen, werden in der Regel ohne Begründung nicht empfohlen.
Howdy_McGee
0

Wenn Sie nur eine bestimmte Klasse aus dem Body-Tag entfernen möchten, sollten Sie Folgendes tun:

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

Funktion remove_body_class ($ wp_classes) {
    foreach ($ wp_classes als $ key => $ value)
        {
            if ($ value == 'portfolio') unset ($ wp_classes [$ key]); // Ersetzt "portfolio" und entfernt es
        }

    return $ wp_classes;
}
Nices Wölkchen
quelle