Supprimer les classes de body_class

12

Je n'ai pas besoin de tout ce gâchis de cours comme celui-ci ...

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

Je voudrais quelque chose comme ça ...

<body class="portfolio">

Existe-t-il un extrait de filtre contenant quelque part la liste de toutes les classes et je peux ensuite commenter ce que je ne souhaite pas voir dans la classe body?

Merci.

    
posée agileapricot 28.04.2011 - 16:37

8 réponses

27

Vous pouvez configurer le tableau $whitelist 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 );
}
    
réponse donnée Geert 28.04.2011 - 22:31
12

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

Soyez très gentil de noter 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 );
    
réponse donnée kaiser 29.04.2011 - 04:14
4

Je recommanderais simplement de supprimer la balise <?php body_class(); ?> template si vous n'en avez pas besoin.

Il suffit d'appliquer class="portfolio" codé en dur dans la balise <body> .

    
réponse donnée Chip Bennett 28.04.2011 - 16:59
2

Il suffit de placer 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 );
}
    
réponse donnée Bryan Contreras 11.01.2017 - 01:21
1

Cela donnera à chaque page une classe de corps composée uniquement de "portefeuille". Le premier argument est le tableau des classes de corps générées qui devraient normalement apparaître. Le deuxième argument est un tableau de classes passé à la fonction de classe body (par exemple, body_class('portfolio'); créerait le deuxième argument dans cette fonction array( 'portfolio' ) ).

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

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
    
réponse donnée John P Bloch 28.04.2011 - 16:42
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().'"';
}
    
réponse donnée Wok 29.04.2011 - 04:38
0

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

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

function remove_body_class($wp_classes) {
    foreach($wp_classes as $key => $value)
        {
            if ($value == 'portfolio') unset($wp_classes[$key]); //  Replaces "portfolio" and removes it
        }

    return $wp_classes;
}
    
réponse donnée Nices Wölkchen 07.02.2018 - 09:15
0
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' );
    
réponse donnée saifulislam 05.09.2018 - 21:53

Lire d'autres questions sur les étiquettes