Supprimer des classes de body_class

17

Je n'ai pas besoin de tout ce désordre de cours comme celui-ci ...

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

J'aimerais quelque chose comme ça ...

<body class="portfolio">

Y a-t-il un extrait de filtre quelque part qui a une liste de toutes les classes et je peux alors simplement décommenter les choses que je ne veux pas voir dans la classe de corps.

Merci.

agileapricot
la source
La vraie question est pourquoi voudriez-vous faire cela? Avoir ces classes supplémentaires n'a pas d'importance dans le grand schéma des choses, et c'est bien de les avoir pour le style, si vous voulez les référencer plus tard.
Otto
3
@Otto - je peux bien la comprendre. Si vous allez jouer avec l'ajout de classes, par exemple. Firebug, alors c'est vraiment difficile à gérer. FF est souvent bogué et le nom de classe que vous écrivez hors de la fenêtre d'affichage. Je désactive beaucoup de cours post-corporels et de cours pendant le développement moi-même - cela facilite la vie.
kaiser
Ahh, ouais, je n'utilise pas Firebug. Son interface est déplorable.
Otto

Réponses:

31

Vous pouvez configurer le $whitelisttableau dans cette fonction pour filtrer toutes les autres classes indésirables.

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
la source
15

Juste un ajout à la réponse @Geert (ajouté une liste noire aussi) :)

Merci de bien vouloir marquer la réponse de @Geert comme solution (pas celle-ci).

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
la source
Bien qu'une très bonne solution de travail, je trouve toujours que «no-js» est ajouté en tant que classe
henrywright
1
En ce qui concerne la classe no-js - je pense que cela pourrait être une chose BuddyPress. Je vais enquêter!
henrywright
1
no-jsou de même jssont généralement traités en utilisant javascript / jquery, donc je suppose que c'était un script que vous auriez besoin de retirer de la file d'attente
Bryan Willis
no-jssera ajouté par le serveur, mais supprimé avec un script si javascript est autorisé à s'exécuter sur le navigateur.
Davey
4

Je recommanderais simplement d'omettre la <?php body_class(); ?>balise de modèle, si vous n'avez pas besoin de sa sortie.

Il suffit d'appliquer class="portfolio"un code dur dans la <body>balise.

Chip Bennett
la source
si vous voulez héberger votre thème au repo wp.org, alors vous n'avez pas ce choix (juste un sidenote).
kaiser
1
LOL, je sais ... J'ai passé en revue un ou deux thèmes pour le référentiel WPORG. :) J'ai supposé à partir de la question, cependant, que ce thème est destiné à un usage personnel plutôt qu'à une distribution publique générale.
Chip Bennett
2

Placez simplement les classes de votre CSS que vous souhaitez supprimer dans $ 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
la source
1

Cela donnera à chaque page une classe de corps uniquement de «portfolio». Le premier argument est le tableau des classes de corps générées qui apparaîtraient normalement. Le deuxième argument est un tableau de classes passé dans la fonction de classe de corps (par exemple body_class('portfolio');, ferait le deuxième argument de cette fonction array( 'portfolio' )).

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

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
John P Bloch
la source
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
la source
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
la source
Bienvenue sur WordPress Stack Exchange! Pourriez-vous s'il vous plaît modifier votre réponse , en utilisant le lien d'édition ci-dessus et expliquer ce que fait ce code, où vous mettriez ce code, et en quoi il est différent ou meilleur que l'une des réponses précédemment publiées? Les réponses codées uniquement sont généralement découragées sans aucune explication.
Howdy_McGee
0

Si vous souhaitez uniquement supprimer une classe spécifique de la balise body, vous devez procéder comme suit:

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

fonction remove_body_class ($ wp_classes) {
    foreach ($ wp_classes as $ key => $ value)
        {
            if ($ value == 'portfolio') unset ($ wp_classes [$ key]); // Remplace le "portfolio" et le supprime
        }

    return $ wp_classes;
}
Nices Wölkchen
la source