Wp_query परिणाम से पोस्ट डेटा की एक सरणी कैसे प्राप्त करें?


35

जब WP_Query विधि के साथ क्वेरी चलाते हैं, तो मुझे एक ऑब्जेक्ट मिला। मैं समझता हूं कि मैं सामान प्रदर्शित करने के लिए लूप कर सकता हूं। लेकिन, मेरा लक्ष्य कुछ भी प्रदर्शित करना नहीं है, इसके बजाय, मैं "फ़ॉरचैट ..." जैसे कुछ करके कुछ पोस्ट डेटा प्राप्त करना चाहता हूं। मैं कैसे पोस्ट डेटा की एक सरणी प्राप्त कर सकता हूं जिसे मैं डेटा के माध्यम से लूप कर सकता हूं?


2
टेम्पलेट टैग का उपयोग करके सीधे पोस्ट डेटा तक पहुँचने के बीच ध्यान रखने का एक महत्वपूर्ण अंतर यह है कि डेटा पर फ़िल्टर लागू नहीं होते हैं और कुछ कार्यक्षमता टूट सकती है।
मिलो 10

जवाबों:


73

आपको वर्डप्रेस कोडेक्स पर WP_Query के लिए फ़ंक्शन संदर्भ पढ़ना चाहिए । वहाँ आपके पास देखने के लिए बहुत सारे उदाहरण हैं। यदि आप किसी परिणाम का उपयोग करके सेट पर लूप नहीं करना चाहते हैं while, तो आप WP_Queryसंपत्ति में क्वेरी द्वारा लौटाए गए सभी पोस्ट प्राप्त कर सकते हैं posts

उदाहरण के लिए

$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;

foreach($posts as $post) {
    // Do your stuff, e.g.
    // echo $post->post_name;
}

1
उदाहरणों में से कोई भी आप लिंक को प्रदर्शित नहीं करते हैं कि पोस्ट कैसे संसाधित करें, हालांकि। इसलिए यह अच्छा है कि आपने उत्तर दिया, अफ़सोस कि उनके पास दस्तावेज़ में यह नहीं है। एक और टिप: यदि आप एक अद्वितीय पोस्ट पर एक मैच कर रहे हैं तो आप इस तरह के फ़ंक्शन का उपयोग कर सकते हैं 'posts_per_page'=>1function wp_queryfirstpost($args) { $q=new WP_Query($args); $pp=$q->get_posts(); $firstpost=false;if ($pp) $firstpost=$pp[0]; wp_reset_postdata(); return $firstpost; }
हेनरिक एर्लडसन

@rofflox: आप एक संत हैं! Get_the_title / ID / younameit को दरकिनार करने के लिए बढ़िया है।
शीशी

8
आप का उपयोग करना चाहिए $query->postsबजाय, $query->get_posts()क्वेरी पद व्याख्या और अतिरिक्त अनावश्यक डेटाबेस प्रश्नों की एक फिर से चल ट्रिगर किया जाएगा
टॉम जम्मू नॉवेल

query- $> get_posts (); अपेक्षा के अनुरूप काम नहीं कर रहा है। यकीन नहीं होता, लेकिन यह क्वेरी से कम पोस्ट देता है। यहाँ देखें: stackoverflow.com/questions/25395299/…
लक्ष्मण

1
यह उत्तर स्पष्ट गलत है, जब आप कुछ तर्क के साथ एक नया WP_Query बनाते हैं, तो विधि get_posts () आंतरिक रूप से तुरंत कहा जाता है और आप इसे फिर से नहीं बुला सकते हैं! यदि आप इसे फिर से कहते हैं जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है तो यह एक अलग क्वेरी चलाएगा, जो कि तर्कों और परिणामों के आधार पर प्रारंभिक रन (आंतरिक झंडे सेट आदि) बनाते हैं, और संभावित रूप से परिणामों का एक अलग (छोटा) सेट लौटा सकता है। या कोई परिणाम नहीं है। जैसा कि टॉमजेनवेल और लक्ष्मण ने सुझाव दिया था कि पोस्ट डेटा प्राप्त करने के लिए $ क्वेरी का उपयोग करना चाहिए।
ivanhoe

11

वास्तव में, आपको while()लूप का उपयोग करने से इनकार करने की आवश्यकता नहीं है । समान WP_Post ऑब्जेक्ट पहले से ही postसंपत्ति में संग्रहीत है :

        $query = new WP_Query( $args );

        if ( $query->have_posts() ) {

            while ( $query->have_posts() ) {

                $query->the_post();

                // now $query->post is WP_Post Object, use:
                // $query->post->ID, $query->post->post_title, etc.

            }

        }

2
ifबेमानी है।
अकुमुलेटर

2
नहीं, ifबेमानी नहीं है। इस सटीक मामले में यह है, लेकिन अधिकांश उत्पादन स्थितियों में, आपके पास अगर और थोड़ी देर के बीच निष्पादित करने के लिए कोड है।
Magi182

2
@ magi182 जो इसे सटीक बनाता है, इस सटीक मामले में। इसका उपयोग करने के लिए लोगों को सीखना चाहिए।
फ्रोडेबोरली

4
@frodeborli, "लोगों को" से शुरू होने वाले बयानों के बारे में अच्छी बात यह है कि आप लगभग हमेशा "लोग नहीं होंगे" और बयान अभी भी सच के रूप में परीक्षण करते हैं।
Magi182

1
@ magi182 मैं उपरोक्त कोड के पूरक के लिए कोड लाइन्स बनाने के लिए शायद सौ अच्छा बना सकता हूं।
फ्रोडेबोरली

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