Remover classes de body_class


17

Eu não preciso de toda essa bagunça de aulas como esta ...

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

Eu gostaria de algo assim ...

<body class="portfolio">

Existe um trecho de filtro em algum lugar que tenha uma lista de todas as classes e eu possa descomentar as coisas que não quero ver na classe body.

Obrigado.


A verdadeira questão é por que você quer fazer isso? Ter essas aulas extras não importa no grande esquema das coisas, e é bom tê-las para estilizar, se você quiser consultá-las mais tarde.
Otto

3
@ Otto - eu posso entendê-la completamente. Se você vai brincar adicionando aulas, por exemplo. firebug, então é realmente difícil lidar com isso. O FF geralmente é com erros e o nome da classe que você está escrevendo fora da janela de exibição. Eu desativo muitas aulas de pós e corpo durante o desenvolvimento - facilita a vida.
Kaiser #

Ahh, sim, eu não uso o Firebug. Sua interface é deplorável.
Otto

Respostas:


31

Você pode configurar a $whitelistmatriz nesta função para filtrar todas as outras classes indesejadas.

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 );
}

15

Apenas uma adição à resposta @Geert (adicionou uma lista negra também) :)

Por favor, seja muito gentil em marcar a resposta de @Geert como solução (não 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 );

Embora uma solução de trabalho muito bom, eu continuo a achar 'não-js' é adicionado como uma classe
henrywright

1
Em relação à classe no-js - acho que pode ser uma coisa do BuddyPress. Eu investigarei!
precisa saber é o seguinte

1
no-jsou, da mesma forma, jsgeralmente são tratados com javascript / jquery, portanto, acho que era um script que você precisaria desenfileirar.
Bryan Willis

no-jsserá adicionado pelo servidor, mas removido com um script se o javascript puder ser executado no navegador.
Davey

4

Eu recomendaria simplesmente omitir o <?php body_class(); ?> tag template, se você não precisar da saída.

Basta aplicar class="portfolio"codificado na <body>tag.


se você deseja hospedar seu tema no repositório wp.org, não tem essa opção (apenas uma nota de rodapé).
Kaiser #

1
LOL, eu sei ... Revi um ou dois Temas para o repositório WPORG. :) Assumi que, a partir da pergunta, esse tema é para uso pessoal, e não para distribuição pública geral.
Chip Bennett

2

Basta colocar as classes do seu css que você deseja remover em $ 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 );
}

1

Isso dará a cada página uma classe de corpo apenas de 'portfólio'. O primeiro argumento é a matriz de classes corporais geradas que normalmente apareceria. O segundo argumento é uma matriz de classes passadas para a função de classe do corpo (por exemplo body_class('portfolio');, faria o segundo argumento nessa função array( 'portfolio' )).

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

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );

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().'"';
}

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' );

Bem-vindo ao WordPress Stack Exchange! Você poderia editar sua resposta , usando o link de edição acima e explicar o que esse código faz, onde você colocaria esse código e como ele é diferente ou melhor do que qualquer uma das respostas postadas anteriormente? As respostas somente de código geralmente são desencorajadas sem nenhuma explicação.
Howdy_McGee

0

Se você deseja remover apenas uma classe específica da tag body, faça isso:

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

função remove_body_class ($ wp_classes) {
    foreach ($ wp_classes como $ key => $ value)
        {
            if ($ value == 'portfolio') não definido ($ wp_classes [$ key]); // Substitui "portfólio" e remove-o
        }

    retornar $ wp_classes;
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.