Удалить классы из класса тела


Мне не нужна вся эта путаница классов, как эта...

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

Я бы хотел что-то вроде этого...

<body class="portfolio">

Есть ли где-нибудь фрагмент фильтра, в котором есть список всех классов, и я могу просто раскомментировать то, что я не хочу видеть в классе body.

Спасибо.

 18
Author: agileapricot, 2011-04-28

8 answers

Вы можете настроить массив $whitelist в этой функции для фильтрации всех других нежелательных классов.

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 );
}
 33
Author: Geert, 2014-09-10 14:33:23

Просто дополнение к ответу @Geert (также добавлен черный список):)

Пожалуйста, будьте так любезны отметить ответ @Geert как решение (не это).

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 );
 16
Author: kaiser, 2011-04-29 02:14:25

Я бы рекомендовал просто опустить тег шаблона <?php body_class(); ?>, если вам не нужен его вывод.

Просто примените class="portfolio" жестко закодированный в тег <body>.

 4
Author: Chip Bennett, 2011-04-28 14:59:14

Просто поместите классы вашего css, которые вы хотите удалить, в $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 );
}
 2
Author: Bryan Contreras, 2017-01-11 00:21:11

Это даст каждой странице класс тела только "портфолио". Первый аргумент - это массив сгенерированных классов тел, которые обычно появляются. Второй аргумент - это массив классов, переданных в функцию класса тела (например, body_class('portfolio'); будет вторым аргументом в этой функции array( 'portfolio' ) ).

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

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
 1
Author: John P Bloch, 2011-04-28 14:42:45
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
Author: Wok, 2011-04-29 02:38:28
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' );
 1
Author: saifulislam, 2018-09-05 21:32:29

Если вы хотите удалить только определенный класс из тега body, вам следует сделать следующее:

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;
}
 0
Author: Nices Wölkchen, 2018-02-07 08:15:20