WP_Query से पोस्ट आईडी प्राप्त करें?


27

वहाँ एक तरह से मैं निम्नलिखित से queried आईडी आईडी की एक सरणी प्राप्त कर सकते हैं:

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3
));

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

    get_template_part( 'templates/content', 'post' );

endwhile; endif; wp_reset_postdata();

जाँच करना:

मैं wp_list_pluckपोस्ट आईडी का एक सरणी पुनः प्राप्त करने के लिए इस्तेमाल किया :

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

फिर एंकोड फंक्शन का उपयोग करके एरे को एक स्ट्रिंग में परिवर्तित करें:

$post_ids_string = implode( ',', $post_ids );

अस्पष्ट प्रश्न के लिए क्षमा करें।


रिक, आपका सवाल अस्पष्ट है। कृपया एक प्रश्न पोस्ट करने से पहले आप जो चाहते हैं वह बहुत स्पष्ट हो। यह हर किसी को अप्रासंगिक सामान का जवाब देने से बचाएगा। आपको वास्तव में पोस्ट आईडी को एक स्ट्रिंग में लौटाए जाने की आवश्यकता है
Pieter Goosen

1
आपका wp_reset_postdataअंदर अगर बयान के बाहर नहीं होना चाहिए, अन्यथा आप पोस्ट डेटा रीसेट हो सकता है जब यह बदल गया है नहीं किया गया
टॉम जम्मू नॉवेल

1
यदि आप केवल आईडी चाहते हैं, तो आपको गंभीरता से s_ha_dum के उत्तर पर विचार करना चाहिए। यह उस डेटाबेस से बहुत सारे अन्य डेटा को पुनर्प्राप्त किए बिना आईडी लौटाएगा जिसे आप फिर से फेंक देते हैं।
क्रिस राए

जवाबों:


43

प्रयत्न

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

पढ़ें wp_list_pluck


5
यह उपयोगी हो सकता है यदि आपको प्रत्येक पोस्ट के लिए संपूर्ण डेटा की आवश्यकता है, न कि केवल पोस्ट आईडी की। अन्यथा, मैं @ s-ha-dum के समाधान के साथ जाऊंगा।
मैरियन

74

fieldsअपनी क्वेरी में तर्क का उपयोग करें ।

फ़ील्ड (स्ट्रिंग) - कौन से फ़ील्ड वापस करने के लिए। सभी फ़ील्ड
डिफ़ॉल्ट रूप से वापस आ जाते हैं । दो अन्य विकल्प हैं: - 'आईडी' - पोस्ट आईडी की एक सरणी लौटें। - 'आईडी => जनक' - एक साहचर्य सरणी लौटाएं [जनक => आईडी,…]।

http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter

$latest = new WP_Query( array (
    'orderby'               => 'rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);

12
यह स्वीकृत उत्तर होना चाहिए क्योंकि यह केवल आईडी पर सवाल करता है जो इसे हर क्विंग को बढ़ाने और 'प्लकिंग' (लूप और री-स्टोरिंग) की तुलना में बहुत तेजी से करता है।
बैरी कूज

शायद आपको आईडी प्राप्त करने की आवश्यकता है सामान्य wp_query पहले से ही निष्पादित किया गया है, उदाहरण के लिए जब आप दो प्रश्नों को बाद में मर्ज करते हैं और पिछली क्वेरी से परिणामों को बाहर करने के लिए आईडी की आवश्यकता होती है।
9

2

अगर आपको केवल आईडी प्राप्त करने की आवश्यकता है, और आपके पास पिछले क्वेरी ऑब्जेक्ट सेट नहीं है, तो @ s-ha-dum से समाधान का उपयोग करना किफायती है।

यहाँ क्यों है:

switch ( $q['fields'] ) {
    case 'ids':
        $fields = "$wpdb->posts.ID";
        break;
    case 'id=>parent':
        $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent";
        break;
    default:
        $fields = "$wpdb->posts.*";

क्योंकि मामले में आप केवल 'fields' => 'ids'कुछ भी नहीं निर्दिष्ट करते हैं जो आपको आईडी के बदले में मिलेगा।

यदि आप 'fields' => 'id=>parent'(वास्तव में अजीब लग रहा है) के साथ जाना होगा तो आपको माता-पिता की आईडी भी मिलेगी।

'fields'तर्क का उपयोग करने के किसी अन्य तरीके से वर्डप्रेस v4.7 के रूप में कोई प्रभाव नहीं पड़ेगा।

लेकिन अगर आपके पास क्वेरी है तो उदाहरण के रूप में wp_list_pluckकाम करेंगे।

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