Eliminar clases de body_class

12

No necesito todo este lío de clases como esta ...

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

Me gustaría algo como esto ...

<body class="portfolio">

Hay un fragmento de filtro en algún lugar que tiene una lista de todas las clases y luego puedo descomentar las cosas que no quiero ver en la clase del cuerpo.

Gracias.

    
pregunta agileapricot 28.04.2011 - 16:37

8 respuestas

27

Puede configurar la matriz $whitelist en esta función para filtrar todas las demás clases no deseadas.

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 );
}
    
respondido por el Geert 28.04.2011 - 22:31
12

Solo una adición a la respuesta de @Geert (también se agregó una lista negra) :)

Por favor, sea tan amable de marcar la respuesta de @Geert como solución (no esta).

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 );
    
respondido por el kaiser 29.04.2011 - 04:14
4

Recomendaría simplemente omitir la etiqueta de plantilla <?php body_class(); ?> , si no tiene necesidad de su salida.

Simplemente aplique class="portfolio" hard codificado en la etiqueta <body> .

    
respondido por el Chip Bennett 28.04.2011 - 16:59
2

Simplemente coloque las clases de su css que desea eliminar en $ 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 );
}
    
respondido por el Bryan Contreras 11.01.2017 - 01:21
1

Esto le dará a cada página una clase de cuerpo de solo 'portafolio'. El primer argumento es la matriz de clases de cuerpo generadas que normalmente aparecerían. El segundo argumento es una matriz de clases pasadas a la función de clase de cuerpo (por ejemplo, body_class('portfolio'); haría el segundo argumento en esta función array( 'portfolio' ) ).

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

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
    
respondido por el 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().'"';
}
    
respondido por el Wok 29.04.2011 - 04:38
0

Si solo desea eliminar una clase específica de la etiqueta del cuerpo, debe hacerlo a esto:

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;
}
    
respondido por el 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' );
    
respondido por el saifulislam 05.09.2018 - 21:53

Lea otras preguntas en las etiquetas