WP_Query के साथ pre_get_posts का उपयोग करना


24

मैं स्टीफन हैरिस के इस प्रश्न का उत्कृष्ट उत्तर पढ़ रहा था WP_query(), query_posts()और इसके उपयोग के बारे में pre_get_posts

वह कहते हैं, "pre_get_posts किसी भी क्वेरी को बदलने के लिए एक फिल्टर है । इसका उपयोग अक्सर केवल 'मुख्य क्वेरी' को बदलने के लिए किया जाता है।"

केवल विशिष्ट माध्यमिक क्वेरी के साथ बनाई गई pre_get_postsफ़िल्टर करने के लिए उपयोग करना संभव है ? जैसे।WP_Query

$my_secondary_loop = new WP_Query(...);
if( $my_secondary_loop->have_posts() ):
    while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post();
       //The secondary loop
    endwhile;
endif;
wp_reset_postdata();

किसी भी मदद की बहुत सराहना की।

जवाबों:


23

सबसे आसान तरीका है कि क्वेरी से ठीक पहले एक्शन जोड़ें और इसके तुरंत बाद हटा दें

add_action('pre_get_posts', 'some_function_in_functionsphp');
$my_secondary_loop = new WP_Query(...);
remove_action('pre_get_posts', 'some_function_in_functionsphp');

if( $my_secondary_loop->have_posts() ):
    while( $my_secondary_loop->have_posts() ): $my_secondary_loop->the_post();
       //The secondary loop
    endwhile;
endif;
wp_reset_postdata();

संपादित करें

एक अन्य तकनीक जो आप उपयोग कर सकते हैं, वह है कि आप अपना स्वयं का क्वेरी संस्करण सेट करें और एक हुक में उसके लिए जांच करें:

// tell WordPress about our new query var
function wpse52480_query_vars( $query_vars ){
    $query_vars[] = 'my_special_query';
    return $query_vars;
}
add_filter( 'query_vars', 'wpse52480_query_vars' );

// check if our query var is set in any query
function wpse52480_pre_get_posts( $query ){
    if( isset( $query->query_vars['my_special_query'] ) )
        // do special stuff

    return $query;
}
add_action( 'pre_get_posts', 'wpse52480_pre_get_posts' );

और टेम्पलेट में:

// set the query var (along with whatever others) to trigger the filter
$args = array(
    'my_special_query' => true
);
$my_secondary_loop = new WP_Query( $args );

बहुत बहुत धन्यवाद मिलाओ। यह वास्तव में बहुत मददगार है। मैं हमेशा सोचता था कि क्या यह आपके स्वयं के क्वेरी संस्करण को सेट करना संभव है।
बेन पियर्सन

मैं संग्रह पृष्ठ के लिए इस ट्रिक का उपयोग कैसे कर सकता हूं? मैं संग्रह पृष्ठ के लिए पूरी क्वेरी फिर से लिखना नहीं चाहता, लेकिन इस तकनीक का उपयोग करना चाहता हूं।
रोहित पांडे

4

pre_get_posts हर पोस्ट क्वेरी के लिए आग:

  • get_posts ()
  • नया WP_Query ()
  • वह यादृच्छिक हालिया पोस्ट आपके ग्राहक को आपके बिना इंस्टॉल किए जाने के लिए विजेट करता है।
  • सब कुछ

- @ केसीन

इसके साथ ही कहा जा रहा है कि जब तक आप अपने फ़िल्टर को सशर्त का उपयोग नहीं करते हैं: is_main_query()तब तक आपका फ़िल्टर आपके नए WP_Query पर आग लगा देगा।

यदि आप केवल अपने विशिष्ट नए WP_Query को लक्षित करना चाहते हैं तो ऐसा करने का कोई तरीका नहीं है।


मिलो की तकनीक के बारे में क्या? मैंने इसे पहले कभी नहीं देखा है ...
ब्रास्कोफिलो

उसकी तकनीक काम करेगी। Ive ने इसे कभी भी pre_get_post के लिए उपयोग नहीं किया है, लेकिन पोस्ट_जैसे अन्य फिल्टरों के लिए हैं
Chris_O

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