2009-02-20 9 views
8

वहाँ, अपने में निर्मित कार्यों का उपयोग कर Wordpress से उत्पादन सामग्री के लिए तीन मुख्य तरीके होने की WP_Query साथ लगते एक:अपना खुद का वर्डप्रेस लूप बनाने के लिए सबसे अच्छी विधि क्या है? की सिफारिश की जा रही

क्या उनके बीच मतभेद हैं? (मैं समझता हूं कि WP_Query कक्षा है, और अन्य दो विधियां हैं)।

एक ही पृष्ठ पर एकाधिक लूप रखने का सबसे साफ तरीका क्या है, उनमें से कोई भी एक दूसरे के साथ हस्तक्षेप किए बिना?

मैं उदाहरण के लिए देख रहा हूं कि आप अपने WP loops को कैसे प्रोग्राम करते हैं; उदा। get_posts के लिए

उत्तर

5

मैंने WP_Query और get_posts दोनों का उपयोग किया है। मेरे साइडबार टेम्पलेट्स में से एक पर, मैं 'category_to_load' की कुंजी के साथ कस्टम फ़ील्ड्स का उपयोग कर किसी विशेष श्रेणी से पोस्ट प्रदर्शित करने के लिए निम्न लूप का उपयोग करता हूं जिसमें श्रेणी स्लग या श्रेणी का नाम होता है। वास्तविक अंतर किसी भी विधि के कार्यान्वयन में आता है।

get_posts विधि लगता है कि इतने में मेरे टेम्पलेट में से कुछ:

कहाँ WP_Query कार्यान्वयन इस तरह दिखता है:

$blog_posts = new WP_Query('showposts=15'); 

while ($blog_posts->have_posts()) : $blog_posts->the_post(); ?> 

      <div <?php post_class() ?> id="post-<?php the_ID(); ?>" class="blog_post"> 
       <div class="title"> 
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> 
        <span class="date"><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></span> 
       </div> 
       <div class="entry"> 
        <?php the_content(); ?> 
       </div> 
       <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?></p> 
      </div> 

     <?php endwhile; ?> 

मुख्य अंतर किया जा रहा आप पुनर्स्थापित करने के लिए की जरूरत नहीं है कि वैश्विक $ पोस्ट वैरिएबल और जब आप WP_query का उपयोग करते हैं तो आपको प्रत्येक पोस्ट ऑब्जेक्ट पर setup_postdata ($ पोस्ट) को कॉल करके पोस्ट डेटा सेट अप करने की आवश्यकता नहीं होती है। आप WP_Query फ़ंक्शन पर सुंदर है_पोस्ट() फ़ंक्शन का भी उपयोग कर सकते हैं, जो get_posts() का उपयोग करके उपलब्ध नहीं है।

आप query_posts() फ़ंक्शन का उपयोग नहीं करना चाहिए जब तक आप वास्तव में, क्योंकि यह पेज के लिए मुख्य पाश को संशोधित करने के लिए मतलब है। docs देखें। इसलिए यदि आप अपने ब्लॉग को प्रदर्शित करने के लिए एक विशेष पृष्ठ बना रहे हैं, तो query_posts को कॉल करना पृष्ठ के लूप को गड़बड़ कर सकता है, इसलिए आपको WP_Query का उपयोग करना चाहिए।

यह सिर्फ मेरे दो सेंट है। मेरा अंतिम सुझाव, आपकी पहली पसंद WP_Query होना चाहिए।

-क्रिस

+0

कैसे आप पोस्ट बच्चों (संलग्नक, संशोधन आदि) का उपयोग होगा:

लेकिन फिर से, एक आम स्थिति query_posts() के लिए एक सुंदर तरीका है अपनी सामग्री क्वेरी करने के लिए है। क्या यह एक अलग सवाल होगी? – meleyal

+0

आप get_children() फ़ंक्शन का उपयोग कर सकते हैं: http://codex.wordpress.org/Function_Reference/get_children। या आप wp_list_pages उपयोग कर सकते हैं - wp_list_pages ('title_li = & child_of =' $ पोस्ट> आईडी 'और SHOW_DATE प्रदर्शन = संशोधित और DATE_FORMAT = $ DATE_FORMAT'।।); ?>: यदि आप एक सूची चाहते हैं तो http://codex.wordpress.org/wp_list_pages। -सी –

3

WP डॉक्स से:: उत्पादन श्रेणी के द्वारा 2 अलग पोस्ट सूचियों, अनुलग्नकों के साथ, मेटा डेटा आदि

यह सबसे अच्छा संदर्भ मैं अब तक पाया है

get_posts() पैरामीटर भी ले सकते हैं जो query_posts() दोनों कार्य अब आंतरिक रूप से एक ही डेटाबेस क्वेरी कोड का उपयोग कर सकते हैं। जबकि query_posts टेम्पलेट कार्य (has_posts, the_post, आदि) द्वारा पुनः प्राप्ति के लिए क्वेरी ऑब्जेक्ट में रिकॉर्ड संग्रहीत करता

दो कार्यों के बीच फर्क सिर्फ इतना है कि get_posts पद रिकॉर्ड के साथ एक सरणी देता है।

वे दोनों क्वेरी निष्पादित करने के लिए WP_Query ऑब्जेक्ट का उपयोग करते हैं।

दूसरा लूप बनाना Wordpress docs में शामिल है। कई लूप के अन्य उदाहरणों के लिए वहां कुछ लिंक हैं। आप देखेंगे कि हर कोई इसे अलग करता है, लेकिन वे सभी अपने परिणामों से खुश हैं।

1

WP एक वस्तु मुख्य पाश के लिए $wp_query कहा जाता है का उपयोग करता है। हम आम तौर पर इस वस्तु है क्योंकि यह have_posts() और the_post() है कि केवल के लिए $wp_query->have_posts() और $wp_query->the_post()

रैपर हैं आप मुख्य पाश आप पाश से पहले query_posts() का उपयोग करना चाहिए संशोधित करने के लिए चाहते हैं के पीछे छिपा हुआ है नहीं दिख रहा।

यदि आप एक और लूप चाहते हैं तो आप ऑब्जेक्ट को query_posts() का उपयोग करके उस नए लूप से पहले पुन: उपयोग कर सकते हैं। यदि आवश्यक हो तो यह कई बार किया जा सकता है।

किसी कारण से आप $ wp_query वस्तु रखने के लिए की जरूरत है चारों ओर तो आप WP_Query उपयोग करना चाहिए। और बेशक, क्योंकि have_posts() और the_post()$wp_query वस्तु के लिए रैपर हैं आप उन्हें WP_Query साथ उपयोग नहीं कर सकते। आप बल्कि का उपयोग करना चाहिए $your_query_obj->have_posts() अर्थात

$sidebar= WP_Query('category_name= sidebar'); 

while($sidebar->have_posts()): $sidebar->the_post(); 
    the_title(); 
    the_content(); 
endwhile; 

एक अच्छा मामले में जहां WP_Queryquery_posts() की तुलना में बेहतर हो सकता है एक बाएं साइडबार है। साइडबार के लिए कोड पाश शायद मुख्य लूप के शीर्ष पर रखा जाएगा के रूप में, एक query_posts() कॉल $wp_query वस्तु को बदल दिया है और भी मुख्य लूप बदल दिया है। इस मामले में साइडबार कोड पर query_posts() का उपयोग करने के लिए आपको उस लूप के लिए उचित सामग्री से पूछने के लिए मुख्य लूप से पहले query_posts() का उपयोग करने की आवश्यकता होगी।

तो इस मामले के लिए WP_Query का उपयोग कर $ wp_query रखने के लिए और इसलिए मुख्य लूप अछूता होगा।

query_posts('category_name=blog'); 

while(have_posts()): the_post(); 
    the_title(); 
    the_content(); 
endwhile;