Body_class से कक्षाएं निकालें


17

मुझे इस तरह की कक्षाओं की इस पूरी गड़बड़ी की आवश्यकता नहीं है ...

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

मुझे ऐसा कुछ चाहिए ...

<body class="portfolio">

क्या कहीं पर एक फिल्टर स्निपेट है जिसमें सभी वर्गों की सूची है और मैं तब केवल उस सामान को बेच सकता हूं जिसे मैं शरीर की कक्षा में नहीं देखना चाहता हूं।

धन्यवाद।


असली सवाल यह है कि आप ऐसा क्यों करना चाहेंगे? उन अतिरिक्त कक्षाओं के होने से चीजों की भव्य योजना में कोई फर्क नहीं पड़ता है, और उन्हें स्टाइल के लिए रखना अच्छा है, यदि आप उन्हें बाद में संदर्भित करना चाहते हैं।
ओट्टो

3
@ ओटो - मैं पूरी तरह से उसे / उसे समझ सकता हूं। यदि आप उदाहरण के लिए वर्गों को जोड़ने के साथ खेलने जा रहे हैं। फायरबग, फिर इसे संभालना वास्तव में कठिन है। एफएफ अक्सर छोटी गाड़ी है और क्लासनेम जिसे आप व्यूपोर्ट से बाहर लिख रहे हैं। मैं देव के दौरान बहुत सारे पोस्ट और बॉडी-क्लास बंद कर देता हूं - इससे जीवन आसान हो जाता है।
कैसर

आह, हाँ, मैं Firebug का उपयोग नहीं करते। इसका इंटरफेस विचित्र है।
ओट्टो

जवाबों:


31

आप $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 );
}

15

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

यद्यपि एक बहुत अच्छा काम करने वाला समाधान है, फिर भी मुझे लगता है कि 'no-js' को एक वर्ग के रूप में जोड़ा जाता है
henrywright

1
No-js वर्ग के बारे में - मुझे लगता है कि यह एक BuddyPress बात हो सकती है। मैं जांच करूंगा!
हेनरीटाइट

1
no-jsया इसी तरह jsआम तौर पर जावास्क्रिप्ट / jquery का उपयोग करके निपटा जाता है, इसलिए मैं अनुमान लगा रहा हूं कि यह एक स्क्रिप्ट थी जिसे आपको समाप्त करने की आवश्यकता होगी
ब्रायन विलिस

no-jsसर्वर द्वारा जोड़ा जाएगा, लेकिन एक स्क्रिप्ट के साथ हटा दिया जाता है यदि जावास्क्रिप्ट को ब्राउज़र पर चलाने की अनुमति दी जाती है।
डेवी

4

मैं केवल <?php body_class(); ?>टेम्प्लेट टैग को छोड़ने की सलाह दूंगा , यदि आपको इसके आउटपुट की कोई आवश्यकता नहीं है।

बस टैग class="portfolio"में हार्ड-कोड लागू करें <body>


यदि आप wp.org रेपो में अपने विषय को होस्ट करना चाहते हैं, तो आपके पास यह विकल्प नहीं है (सिर्फ एक विचार)।
kaiser

1
LOL, मुझे पता है ... मैंने WPORG रिपॉजिटरी के लिए एक या दो थीम्स की समीक्षा की है। :) मैंने सवाल से मान लिया, हालांकि, यह थीम सामान्य, सार्वजनिक वितरण के बजाय व्यक्तिगत उपयोग के लिए है।
चिप बेनेट

2

बस अपने 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 );
}

1

यह प्रत्येक पृष्ठ को केवल 'पोर्टफोलियो' का एक निकाय वर्ग देगा। पहला तर्क जेनरेट किए गए बॉडी क्लासेज का एरे है जो आम तौर पर दिखाई देगा। दूसरा तर्क निकाय वर्ग फ़ंक्शन (उदाहरण के body_class('portfolio');लिए इस फ़ंक्शन में दूसरा तर्क देगा 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 स्टैक एक्सचेंज में आपका स्वागत है! क्या आप अपना उत्तर संपादित कर सकते हैं , ऊपर दिए गए संपादन लिंक का उपयोग करके और समझा सकते हैं कि यह कोड क्या करता है, आप इस कोड को कहाँ रखेंगे, और यह पहले से पोस्ट किए गए किसी भी उत्तर से अलग या बेहतर कैसे है? कोड केवल उत्तर आमतौर पर बिना किसी स्पष्टीकरण के हतोत्साहित होते हैं।
Howdy_McGee

0

यदि आप केवल एक विशेष वर्ग को निकाय से हटाना चाहते हैं, तो आपको यह करना चाहिए:

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

फ़ंक्शन हटाएं_बॉडी_क्लास ($ wp_classes) {
    foreach ($ wp_classes के रूप में $ कुंजी => $ मूल्य)
        {
            अगर ($ मूल्य == 'पोर्टफोलियो') परेशान ($ wp_classes [$ कुंजी]); // "पोर्टफोलियो" की जगह लेता है और इसे हटा देता है
        }

    $ wp_classes लौटाएं;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.