WP_Query को मिलने वाले पदों की संख्या को कैसे सीमित करें?


25

मैं Google और WPSE पर शोध कर रहा हूं और केवल एक चीज जिसे मैं बार-बार देखता हूं वह है उपयोग करना showposts, जो कि पदावनत है।

मैं से परिचित हूँ WP_Query, और मैंने सोचा कि अगर मैं सेट posts_per_pageमेरी सीमा (यानी। 5), और करने के लिए nopagingकरने के लिए true, यह "की तरह कुछ करने के लिए बन जाएगा ठीक है, मैं तुम्हें दे देंगे केवल 5 पदों "। लेकिन यह काम नहीं करता है।

यहाँ छवि विवरण दर्ज करें

मैं यह कैसे कर सकता हूँ?


बस'posts_per_page=5'
पीटर गोसन ने

मैं उस का उपयोग करें, लेकिन वह सभी पदों को मिला। यदि मैं found_postsसंपत्ति तक पहुंचता हूं , तो यह 5. से अधिक संख्या कहता है। मैं चाहता हूं कि मेरी क्वेरी केवल 5 पदों पर रहे। क्या यह संभव है? @ पीटरसन
एलियासएनएस

आपको nopagingपैरामीटर सेट नहीं करना चाहिए, यह निर्धारित करने के लिए कि सभी पोस्ट प्राप्त करने का सही मतलब है
पीटर गोएंस

@PieterGoosen यदि मैं nopagingपैरामीटर सेट नहीं करता हूं तो वह डिफ़ॉल्ट हो जाता है false, इसलिए फ्रंटपेज 5 पोस्ट दिखाता है, लेकिन क्वेरी अधिक रखती है। मैं प्रश्न में एक छवि जोड़ता हूं।
एलियासएनएस

आपकी टिप्पणियां भ्रमित कर रही हैं, आपने पृष्ठ पर दिखाए गए पोस्ट की मात्रा को 5 तक सीमित करने के लिए कहा है, वही आपको मिलता है। अब, आप कहते हैं (अपनी पिछली टिप्पणी :-)) फिर क्वेरी अधिक रखती है। कृपया समझाएँ। आप पोस्ट_पर_पेज सेट नहीं कर सकते हैं और फिर उसी क्वेरी में सही करने के लिए no_paging सेट का उपयोग कर सकते हैं, यह या तो पोस्ट_पर_पेज या सच पर सेट करना है
Pieter Goosen

जवाबों:


43

मुझे लगता है कि अब मैं समझ गया हूं कि आप क्या करने की कोशिश कर रहे हैं। जब आप के साथ एक कस्टम क्वेरी चलाने WP_Queryऔर प्रति पृष्ठ केवल 5 पदों प्राप्त करने के लिए सीमा निर्धारित, केवल 5 पदों क्वेरी के द्वारा प्राप्त किया जाएगा और उस क्वेरी केवल 5 पदों का आयोजन करेगा, लेकिन पृष्ठांकन के लिए, WP_Queryअभी भी पूरे डेटाबेस के माध्यम से चलाता है और उन सभी पदों को गिनता है जो क्वेरी के मानदंड से मेल खाते हैं।

यही कारण है कि देखा जा सकता है जब आप को देखो $found_postsऔर $max_num_pagesक्वेरी के गुणों। चलो एक उदाहरण लेते हैं:

आपके पास डिफ़ॉल्ट पोस्ट प्रकार से संबंधित 20 पोस्ट हैं post। आपको केवल पृष्ठ 5 के बिना नवीनतम 5 पदों की आवश्यकता है। आपकी क्वेरी इस तरह दिखती है

$q = new WP_Query( 'posts_per_page=5' );
  • var_dump( $q->posts ) उम्मीद के मुताबिक आपको नवीनतम 5 पोस्ट देंगे
  • echo $q->found_posts तुम्हे दूंगा 20
  • echo $q->max_num_pages तुम्हे दूंगा 4

इस अतिरिक्त कार्य का प्रभाव केवल कुछ पोस्ट वाली साइटों पर कम से कम होता है, लेकिन यदि आप एक साइट को सैकड़ों या हजारों पोस्टों के साथ चला रहे हैं तो यह gt महंगा हो सकता है। यह संसाधनों की बर्बादी है अगर आपको केवल 5 नवीनतम पदों की आवश्यकता है

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

निष्कर्ष

अंत में, यदि आप किसी प्रश्न पर पृष्ठांकन का उपयोग नहीं करने जा रहे हैं, तो 'no_found_rows=true'अपनी क्वेरी में चीजों को गति देने और संसाधनों को बर्बाद करने से बचाने के लिए हमेशा बुद्धिमान होना चाहिए ।


3

@ पीटर के साथ बातचीत के बाद सवाल की टिप्पणियों पर ध्यान केंद्रित करें, मुझे लगता है कि मैं सवाल का जवाब दे सकता हूं और अपनी गलती की व्याख्या कर सकता हूं।

कुंजी यह है कि found_postsमुझे भ्रमित कर रहा था। मुझे लगता है कि, यह संख्या पुनः प्राप्त पदों है, लेकिन नहीं है। यह मापदंड से मेल खाने वाले पदों की संख्या है । यह WP_Query2 भागों की तरह है : पदों को खोजने के लिए एक (सभी) सामग्री लाने के लिए, और जब यह paginationमापदंडों के लिए जाँच करता है । इसलिए हमारे पास वह $post_countसंपत्ति है जो प्राप्त किए गए पदों की संख्या है (कोडेक्स कहते हैं The number of posts being displayed), यह निश्चित रूप से posts_per_pageपैरामीटर पर संख्या के बराबर है , और $postsसरणी संपत्ति पर मदों की संख्या ।

तो WP_Queryकोई बेकार काम नहीं कर रहा है, जैसा कि मैंने सोचा ^ ^

आशा है कि यह दूसरों की मदद करता है!


मेरा जवाब देखिए। मुझे लगता है कि मैं समझता हूं कि आपका क्या मतलब है :-)
पीटर गोसन ने

हाँ! आपने इसे बहुत अच्छी तरह से किया: D अंत में मुझे इसे करने का तरीका मिल गया, और मैं समझता हूं कि सभी = D धन्यवाद @PieterGoosen!
एलियासंस

किया हुआ! इसने अपना जवाब दिया ^ ^ @PieterGoosen
EliasNS

1

ठीक है, आपको 'blog_posts' नाम की पोस्ट टाइप करने देता है, और आप उस पोस्ट टाइप के 5 पोस्ट लाना चाहते हैं। यहाँ है आपको क्या करने की जरूरत है

$args = array(
        'post_type' => 'blog_posts',
        'posts_per_page' => '5',
);


$query = new WP_Query($args);

उपरोक्त क्वेरी 'blog_posts' प्रकार की 5 पोस्ट लौटाएगी, यदि यह एक कस्टम पोस्ट प्रकार नहीं है, तो इसे इस तरह बदलें 'post_type' => 'posts',यदि आप सभी पोस्ट लाना चाहते हैं तो इस तरह बदलें 'posts_per_page' => '-1',, अधिक जानकारी के लिए WP क्वेरी


कृपया प्रश्न पर टिप्पणी देखें।
एलियासएनएस

1

मुझे पता है कि @ user1750063 ने कोड का उल्लेख किया है लेकिन यह प्रयास करें

$args = array (
    'post_type'              => 'custom_post',
    'nopaging'               => false,
    'posts_per_page'         => '5',
    'order'                  => 'DESC',
    'orderby'                => 'ID',
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // display content
    }
} else {
    // display when no posts found
}

wp_reset_postdata();     // Restore original Post Data

idएक orderbyमूल्य के रूप में अमान्य है और paginationएक अमान्य पैरामीटर है
Pieter Goosen

paginationमान्य पैरामीटर नहीं है। आपका मतलब है 'nopaging' => true? यदि हाँ, तो मुझे सभी पद मिलेंगे। यही तो मैं नहीं चाहता। @PieterGoosen मुझे लगता है कि उसका मतलब है ID
इलायसएनएस

आदेश प्रदर्शित करने के लिए ऑर्डरबी है, है ना? यह नोडिंग मान / पैरामीटर को नुकसान नहीं पहुंचाता है। @PieterGoosen ID & ऑर्डरबी अमान्य क्यों है? क्या आप बात को स्पष्ट कर सकते हैं?
श्रेयो गि

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