Body_class sınıflarını kaldırma


17

Sınıfların bu kadar karmaşasına ihtiyacım yok ...

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

Böyle bir şey rica ediyorum ...

<body class="portfolio">

Tüm sınıfların bir listesini içeren bir yerde bir filtre snippet'i var mı ve o zaman sadece vücut sınıfında görmek istemediğim şeyleri kaldırabilirim.

Teşekkürler.


Asıl soru, bunu neden yapmak isteyesiniz? Bu ekstra sınıflara sahip olmak, şeylerin büyük şemasında önemli değildir ve daha sonra başvurmak isterseniz, stil için onlara sahip olmak güzel.
Otto

3
@Otto - Onu tam olarak anlayabiliyorum. Örneğin, sınıfları ekleyerek oynayacaksanız. kundakçı, o zaman bunu ele almak gerçekten zor. FF genellikle hatalıdır ve görünüm penceresinden yazdığınız sınıf adıdır. Kendimi geliştirirken birçok post ve vücut sınıfını kapatıyorum - hayatı kolaylaştırıyor.
kaiser

Ahh, evet, Firebug kullanmıyorum. Arayüzü içler acısı.
Otto

Yanıtlar:


31

$whitelistBu işlevdeki diziyi diğer tüm istenmeyen sınıfları filtreleyecek şekilde yapılandırabilirsiniz .

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

@Geert cevabına sadece bir ekleme (kara liste de eklendi) :)

Lütfen @Geert in cevabını çözüm olarak işaretlemek için çok iyi olun (bu değil).

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

Çok iyi bir çalışma çözümü olmasına rağmen, hala 'no-js' sınıf olarak eklendiğini
görüyorum

1
No-js sınıfı ile ilgili olarak - bunun BuddyPress bir şey olabileceğini düşünüyorum. Ben araştıracağım!
henrywright

1
no-jsveya benzer jsşekilde genellikle javascript / jquery kullanımı ile ilgilenilir, bu yüzden dequeue gereken bir komut dosyası olduğunu tahmin ediyorum
Bryan Willis

no-jssunucu tarafından eklenir, ancak javascript'in tarayıcıda çalışmasına izin verilirse bir komut dosyasıyla kaldırılır.
Davey

4

Çıktısına <?php body_class(); ?>ihtiyacınız yoksa, yalnızca şablon etiketini atlamanızı öneririm .

Etikete class="portfolio"sabit kodlu uygulamanız <body>yeterlidir.


temanızı wp.org deposunda barındırmak istiyorsanız, bu seçeneğe sahip değilsiniz (sadece bir sidenote).
kaiser

1
LOL, biliyorum ... WPORG deposu için bir veya iki Tema inceledim. :) Ancak, bu Temanın genel dağıtım yerine kişisel kullanım için olduğunu düşündüm.
Chip Bennett

2

Css'nizin sınıflarını kaldırmak istediğiniz $ 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

Bu, her sayfaya sadece bir 'portföy' gövde sınıfı verecektir. İlk argüman, normalde görünecek olan oluşturulan gövde sınıfları dizisidir. İkinci argüman, body class fonksiyonuna geçirilen bir sınıf dizisidir (örneğin body_class('portfolio');, bu fonksiyondaki ikinci argümanı yapar 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' );

WordPress Stack Exchange'e Hoş Geldiniz! Lütfen yukarıdaki düzenleme bağlantısını kullanarak cevabınızı düzenleyebilir ve bu kodun ne yaptığını, bu kodu nereye koyacağınızı ve daha önce yayınlanan cevaplardan nasıl farklı veya daha iyi olduğunu açıklayabilir misiniz? Yalnızca kod yanıtları genellikle herhangi bir açıklama yapılmadan önerilmez.
Howdy_McGee

0

Yalnızca vücut etiketinden belirli bir sınıfı kaldırmak istiyorsanız, bunu yapmanız gerekir:

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

function remove_body_class ($ wp_classes) {
    foreach ($ wp_classes $ anahtar => $ değer)
        {
            eğer ($ value == 'portföy') ayarlanmamışsa ($ wp_classes [$ key]); // "portföy" yerine geçer ve onu kaldırır
        }

    return $ wp_classes;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.