हर 3 पोस्ट को कैसे चिह्नित करें


17

मैं अपने बैंड के लिए एक वर्डप्रेस साइट पर काम कर रहा हूं और मैं अपने ब्लॉग पेज पर हर 3 पोस्ट को एक विशेष वर्ग के लिए लागू करना चाहता हूं, किसी के पास कोई संकेत है कि इसे कैसे प्राप्त किया जाए? किसी भी मदद की बहुत सराहना की है, धन्यवाद! रॉक एन रोल।

जवाबों:


15

मेरा दृष्टिकोण। कोई अतिरिक्त कार्य नहीं, कोई फ़िल्टर नहीं। :)

<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>

वैकल्पिक:

<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>

इसने इसे @toscho मार दिया! यह इस श्रेणी के पृष्ठ पर उपयोग करने के बाद से सबसे अच्छा काम किया और एक fn हर जगह स्टाइल पोस्ट कर रहा था। धन्यवाद आदमी, +1। मुझे नहीं लगता कि मेरे पास अभी तक आधिकारिक रूप से +1 है।
ज़ोरान एम।

1
क्या यह वास्तव में ग्लोबल्स वैल्यू (प्री-इन्क्रीमेंट ऑपरेटर के कारण) को प्रभावित नहीं करता है और संभावित रूप से कुछ और पेंच करता है जो कि वर्तमान_पोस्ट काउंट प्रॉपर्टी के आधार पर हो सकता है? मेरा मतलब है, संभावना पतली है, ठीक है, लेकिन यह सिर्फ (0 === ($ GLOBALS ['wpdb]] -> current_post + 1)% 3?' तीसरी ':' 'करने के लिए सुरक्षित नहीं होगा?
टॉम ऑगर

1
@TomAuger कुछ स्पष्ट कारणों से इसका कोई दुष्प्रभाव नहीं है। लेकिन लालित्य के दृष्टिकोण से - आप सही हैं। मैंने एक बेहतर उदाहरण जोड़ा। :)
FUXIA

4
Notice: Undefined property: wpdb::$current_post in
नॉट

9

@Helgathevikings जवाब के अतिरिक्त

वैश्विक नामस्थान को प्रदूषित किए बिना post_class () fn का उपयोग करें

  1. staticएक वर्ग के अंदर चर का उपयोग करने से वैश्विक चर के समान व्यवहार की अनुमति मिलती है: वे जगह में रहते हैं और बदलते नहीं हैं, जब तक कि आप उन्हें बदलते नहीं हैं।
  2. इससे भी बेहतर (जैसा कि @Milo ने टिप्पणियों में सुझाव दिया है), DB क्लास से वर्तमान पोस्ट ले लो।
उदाहरण:
function wpse44845_add_special_post_class( $classes )
{
    // Thanks to @Milo and @TomAuger for the heads-up in the comments
    0 === $GLOBALS['wpdb']->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
}
add_filter( 'post_class','wpse44845_add_special_post_class' );

अपडेट करें

हम current_postवैश्विक $wp_queryवस्तु की संपत्ति का उपयोग कर सकते हैं । के साथ एक अनाम फ़ंक्शन का उपयोग करते हैंuse$wp_query संदर्भ के साथ वैश्विक पर पास होने के लिए कीवर्ड के ( PHP 5.3+ ):

add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
    0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
} );

इसके अलावा, हम इसे मुख्य लूप के साथ प्रतिबंधित कर सकते हैंin_the_loop() सशर्त जांच के सकते हैं।


1
मुझें यह पसंद है। स्टैटिक वैरिएबल को काफी न समझें। आज सीखने के लिए एक और बात!
हेलगुथेवीकिंग

3
सिर्फ उपयोग क्यों नहीं $wpdb->current_post?
मिलो

@Milo अच्छा पकड़ +1
कैसर

बहुत बहुत धन्यवाद, वास्तव में मदद की सराहना करते हैं! इसे अभी जोड़ना!
ज़ोरान एम।

आह यह समारोह बदमाश @kaiser है और खूबसूरती से सरल है! मुझे लगता है कि मुझे एक श्रेणी पृष्ठ के लिए कुछ चाहिए। यह मुझे मेरे दोस्त के जीवन में बाद में बचा सकता है, मुझे कुछ नया सीखने के लिए धन्यवाद। +11!
ज़ोरान एम।

3

यदि आपकी थीम पोस्ट क्लासेस बनाने के लिए पोस्ट_क्लास () का उपयोग करती है, तो आप कोशिश कर सकते हैं। मैं 100% निश्चित नहीं हूँ कि यह कैसे संभालेगा pagination b / ci इसके परीक्षण के लिए मेरे स्थानीय इंस्टा पर पर्याप्त पोस्ट नहीं हैं

add_filter('post_class','wpa_44845');

global $current_count;

$current_count = 1;

 function wpa_44845( $classes ){

    global $current_count;

    if ($current_count %3 == 0 ) $classes[] = 'special-class';

    $current_count++;

    return $classes;

 }

100% निश्चित नहीं है, लेकिन मुझे लगता है कि आप नाम स्थान को साफ रखने के staticबजाय एक संस्करण का उपयोग कर सकते हैं global। वैसे भी: +1।
केसर

आप दोनों वैश्विक $ current_count को स्थिर $ current_count में बदलते हैं? जब मैं इसका परीक्षण करता हूं तो कुछ भी नहीं लगता है। पर्याप्त डब्ल्यू / वैरिएबल स्कोप से परिचित नहीं है, हालांकि मैं मानता हूं कि यदि आप कर सकते हैं तो नाम स्थान को प्रदूषित न करें।
हेलगेटेविकिंग


3
तुम भी $wpdb->current_postएक और चर बनाने के बिना उपयोग कर सकते हैं ।
मिलो

2
$i = 0;
if ( have_posts ) :
while( have_posts ) :
    the_post();

    $class = 'class="BASIC-CLASS';
    if ( 0 === ( $i % 3 ) )
        $class .= 'YOUR-SPECIAL-CLASS';
    $class .= '"';

    echo "<div {$class}>";
        // do stuff
    echo '</div>';

    $i++;
endwhile;
endif;

1

सीएसएस और जावास्क्रिप्ट के साथ ऐसा करने के तरीके भी हैं।

CSS3 के साथ आप प्रत्येक तीसरे पोस्ट को nth-child selector के साथ लक्षित करते हैं।

article.post:nth-child(3n+0)
{
    background-color: #777;
}

या jQuery के साथ, आप उसी तकनीक का उपयोग करके CSS वर्ग जोड़ सकते हैं।

jQuery(function($) {
    $( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.