Rimuovi le classi da body_class


17

Non ho bisogno di tutto questo casino di lezioni come questa ...

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

Vorrei qualcosa del genere ...

<body class="portfolio">

C'è un frammento di filtro da qualche parte che ha un elenco di tutte le classi e quindi posso solo decommentare le cose che non voglio vedere nella classe del corpo.

Grazie.


La vera domanda è: perché vorresti farlo? Avere lezioni extra non ha importanza nel grande schema delle cose, ed è bello averle per lo styling, se vuoi fare riferimento in un secondo momento.
Otto,

3
@Otto - posso comprenderlo appieno. Se hai intenzione di giocare con l'aggiunta di lezioni in es. firebug, quindi è davvero difficile gestirlo. FF è spesso difettoso e il nome della classe che stai scrivendo dal riquadro di visualizzazione. Spengo molte classi post e body durante lo sviluppo da solo - rende la vita più semplice.
Kaiser

Ah, sì, non uso Firebug. La sua interfaccia è deplorevole.
Otto,

Risposte:


31

È possibile configurare l' $whitelistarray in questa funzione per filtrare tutte le altre classi indesiderate.

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

Solo un'aggiunta alla risposta @Geert (aggiunta anche una lista nera) :)

Sii così gentile da contrassegnare la risposta di @Geert come soluzione (non questa).

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

Sebbene sia un'ottima soluzione funzionante, trovo ancora 'no-js' aggiunto come classe
henrywright,

1
Per quanto riguarda la classe no-js, penso che potrebbe essere una cosa di BuddyPress. Investigherò!
henrywright,

1
no-jso allo stesso modo jssono di solito trattati con javascript / jquery, quindi suppongo che fosse uno script che avresti dovuto accodare
Bryan Willis,

no-jsverrà aggiunto dal server, ma rimosso con uno script se javascript può essere eseguito sul browser.
Davey,

4

Consiglierei semplicemente di omettere il <?php body_class(); ?>tag template, se non hai bisogno del suo output.

Basta applicare class="portfolio"hard-coded nel <body>tag.


se vuoi ospitare il tuo tema nel repository wp.org, allora non hai questa scelta (solo un sidenote).
Kaiser

1
LOL, lo so ... ho esaminato uno o due temi per il repository WPORG. :) Ho ipotizzato dalla domanda, tuttavia, che questo tema è per uso personale, piuttosto che una distribuzione pubblica generale.
Chip Bennett,

2

Posiziona semplicemente le classi dei tuoi CSS che vuoi rimuovere in $ 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

Questo darà ad ogni pagina una classe corporea di solo 'portfolio'. Il primo argomento è l'array di classi di corpi generate che normalmente apparirebbero. Il secondo argomento è una matrice di classi passate nella funzione di classe del corpo (ad es. body_class('portfolio');Farebbe il secondo argomento in questa funzione 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' );

Benvenuto nello scambio di stack di WordPress! Potresti modificare la tua risposta , usando il link di modifica sopra e spiegare cosa fa questo codice, dove lo inseriresti e in che modo è diverso o migliore di una delle risposte precedentemente pubblicate? Solitamente le risposte al codice sono scoraggiate senza alcuna spiegazione.
Howdy_McGee

0

Se desideri rimuovere solo una classe specifica dal body tag, dovresti:

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

funzione remove_body_class ($ wp_classes) {
    foreach ($ wp_classes come $ key => $ value)
        {
            se ($ value == 'portfolio') non impostato ($ wp_classes [$ key]); // Sostituisce "portfolio" e lo rimuove
        }

    return $ wp_classes;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.