2012-01-20 15 views
15

के चारों ओर एक div जोड़ें मैं आउटपुट पोस्ट में वर्डप्रेस में लूप का उपयोग कर रहा हूं। मैं एक div के अंदर हर तीन पदों को लपेटना चाहता हूँ। मैं लूप के प्रत्येक पुनरावृत्ति पर वृद्धि के लिए एक काउंटर का उपयोग करना चाहता हूं, लेकिन मुझे वाक्यविन्यास का यकीन नहीं है जो कहता है "अगर $ 3 मैं 3 का एक से अधिक हूं" या "यदि $ 3 मैं 3 - 1 का बहुमत हूं"।PHP लूप: प्रत्येक तीन आइटम सिंटैक्स

$i = 1; 
if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); 
    // If is the first post, third post etc. 
    if("$i is a multiple of 3-1") {echo '<div>';} 

    // post stuff... 

    // if is the 3rd post, 6th post etc 
    if("$i is a multiple of 3") {echo '</div>';} 

$i++; endwhile; endif; 

मैं यह कैसे कर सकता हूं? धन्यवाद!

+0

अगर मैं जोड़ा करने के लिए केवल अगर यह अधिक से अधिक 3 आइटम है चाहते हैं क्या होता है? और जब यह 3 वस्तुओं के बराबर होता है तो इसे बिना परिवर्तन किए छोड़ दिया जाता है? –

+0

यह सबसे आसान तरीका था जो मुझे मिल सकता था: http://stackoverflow.com/questions/28247770/loop-through-wordpress-posts-and-wrap-each-x-post-in-a-div –

उत्तर

44

क्यों निम्न नहीं? यह इसे खोल देगा और तीसरे पोस्ट के बाद इसे बंद कर देगा। फिर घटना में अंत div को बंद करें, प्रदर्शित करने के लिए 3 में से एक नहीं है।

$i = 1; 
//added before to ensure it gets opened 
echo '<div>'; 
if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); 
    // post stuff... 

    // if multiple of 3 close div and open a new div 
    if($i % 3 == 0) {echo '</div><div>';} 

$i++; endwhile; endif; 
//make sure open div is closed 
echo '</div>'; 

मामले में आप नहीं जानते थे, % काम करने ऑपरेटर शेष वापस आ जाएगी के बाद दो नंबर विभाजित कर रहे हैं।

+0

जो अच्छा दिखता है - क्या गति या दक्षता के मामले में एक या दूसरे का उपयोग करने का कोई फायदा है? मुझे लगता है कि मॉड्यूलस ऑपरेटर का उपयोग कोड –

+0

की एक कम पंक्ति बनाता है, अब मैं समझता हूं - मॉड्यूलस का उपयोग करके एक अनजान div बना देगा यदि 3 का कोई बहु नहीं है। धन्यवाद! –

+1

मुझे यह बेहतर पसंद है इसलिए यह सभी शुरुआती 'divs' को बंद करना सुनिश्चित करता है। मैं वास्तव में क्या करता हूं वह पहला div लेता है और लूप के बाहर इसे गूंजता है। इस तरह यदि केवल 1 है तो आपके पास एक खुला/बंद टैग है। यह सुनिश्चित करेगा कि आप स्वरूपण को मार नहीं सकते हैं। वास्तव में इसकी प्रसंस्करण गति को प्रभावित नहीं करनी चाहिए क्योंकि यह एक "मूल" समीकरण है। – kwelch

9

modulus ऑपरेटर का उपयोग करें:

if ($i % 3 == 0) 

अपने कोड में आप का उपयोग कर सकते हैं:

if($i % 3 == 2) {echo '<div>';} 

और

if($i % 3 == 0) {echo '</div>';} 
+0

क्या आप कृपया मदद कर सकते हैं मैंने उस कोड के संदर्भ में जो मैंने उपरोक्त मेरे उत्तर में चिपकाया था? –

+0

@ जे-मैन 86: आप इसका उपयोग कर सकते हैं, '$ i' $ i% 3 == 0' –

+0

@ j-man86 के साथ '3 $ 3 का एक बहुमत है": कृपया मेरा अपडेट देखें। –

0

अगर आप न अतिरिक्त div आप इस का उपयोग कर सकते की जरूरत है:

$i = 0; 

$post_count = $wp_query->found_posts; 

if ($wp_query->have_posts()) : while ($wp_query->have_posts()) :$wp_query->the_post(); 

// If is the first post, third post etc. 
(($i%3) == 0) ? echo '<div>' : echo ''; 

// post stuff... 

// if is the 3rd post, 6th post etc or after the last element 

($i == ($post_count - 1) || (++$i%3) == 0) ? echo '</div>' : 
echo ''; 

endwhile; endif; 
संबंधित मुद्दे