आप दस्तावेज़ीकरण pre_get_post
. पर पा सकते हैं यहां फ़िल्टर करें http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
ऐसा लगता है कि समस्या वास्तव में यह है कि आप पोस्ट_आईड्स को कैसे सेट कर रहे हैं जिसे आप पुनः प्राप्त करना चाहते हैं। यदि आप ऊपर दिए गए लिंक को देखें, तो आप विभिन्न मान देख सकते हैं जिन्हें $query
पर सेट किया जा सकता है ऑब्जेक्ट जो फ़िल्टर को पास किया जाता है, और post_id
उनमें से एक नहीं है, इसलिए जब आप इसे सेट करते हैं तो यह "काम करता है", और जब आप p
सेट करते हैं तो "काम नहीं करता" . उत्तरार्द्ध एकल पोस्ट आईडी के लिए है, इसलिए यदि आप केवल 100 चाहते हैं, तो आप $query->set('p', 100)
का उपयोग करेंगे . यदि आप उन परिणामों को वापस करना चाहते हैं जहां पोस्ट आईडी एक सरणी में है, तो आप $query->set('post__in', array(100, 120))
का उपयोग करें। . आपका एसक्यूएल कोड सिर्फ आईडी लौटा रहा है, इसलिए वस्तुओं को वापस करने के बजाय, आप सीधे एक सरणी प्राप्त कर सकते हैं - मुझे लगता है कि शीर्षक और print_r
गूंज रहा है लाइनें सिर्फ डिबगिंग कर रही हैं:
// get results as a numeric array
$post_ids = $wpdb->get_results($request, ARRAY_N);
// pass post id array to $query
$query->set( 'post__in', $post_ids );
यदि $query
. पर मौजूदा परस्पर विरोधी पैरामीटर सेट हैं, तो भी आपको परिणाम नहीं मिल सकते हैं . आप इन मानों को var_dump($query->query_vars)
. से जांच सकते हैं और कोई भी सेट करें जो एक खाली स्ट्रिंग के विरोध में हो सकता है - आपके मामले में $query->set( 'm', '' );