यदि यह प्रश्न पुराना है, तब भी मैं इसे यहाँ रखूँगा जब कोई Google खोज से आने वाले व्यक्ति को अधिक लचीले उत्तर की आवश्यकता होगी।
समय के साथ, मैंने WP_Query
अज्ञेयवादी या वैश्विक क्वेरी होने का समाधान विकसित किया । जब आप एक कस्टम का उपयोग WP_Query
करते हैं, तो आप केवल उपयोग करने include
या require
अपने पर चर का उपयोग करने में सक्षम होने के लिए सीमित होते हैं $custom_query
, लेकिन कुछ मामलों में (जो मेरे लिए सबसे अधिक मामले हैं!), मेरे द्वारा बनाए गए टेम्पलेट भागों का उपयोग वैश्विक क्वेरी में कुछ समय के लिए किया जाता है। (जैसे आर्काइव टेम्प्लेट) या किसी कस्टम में WP_Query
(जैसे फ्रंट पेज पर कस्टम पोस्ट टाइप को क्वेरी करना)। इसका मतलब है कि मुझे क्वेरी के प्रकार की परवाह किए बिना विश्व स्तर पर सुलभ होने के लिए एक काउंटर की आवश्यकता है। वर्डप्रेस इसे उपलब्ध नहीं करता है, लेकिन यहां कुछ हुक के लिए इसे कैसे बनाया जाए।
इसे अपने कार्यों में रखें
/**
* Create a globally accessible counter for all queries
* Even custom new WP_Query!
*/
// Initialize your variables
add_action('init', function(){
global $cqc;
$cqc = -1;
});
// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action('loop_start', function($q){
global $cqc;
$cqc = -1;
}, 100, 1);
// At each iteration of a loop, this hook is called
// We store the current instance's counter in our global variable
add_action('the_post', function($p, $q){
global $cqc;
$cqc = $q->current_post;
}, 100, 2);
// At each end of the query, we clean up by setting the counter to
// the global query's counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
add_action( 'loop_end', function($q){
global $wp_query, $cqc;
$cqc = $wp_query->current_post;
}, 100, 1);
इस समाधान की सुंदरता यह है कि, जैसा कि आप एक कस्टम क्वेरी में दर्ज करते हैं और सामान्य लूप में वापस आते हैं, यह किसी भी तरह से सही काउंटर पर रीसेट होने वाला है। जब तक आप किसी क्वेरी के अंदर होते हैं (जो कि वर्डप्रेस में हमेशा होता है, तो आप जानते थे), आपका काउंटर सही होने वाला है। ऐसा इसलिए है क्योंकि मुख्य क्वेरी को एक ही वर्ग के साथ निष्पादित किया जाता है!
उदाहरण :
global $cqc;
while(have_posts()): the_post();
echo $cqc; // Will output 0
the_title();
$custom_query = new WP_Query(array('post_type' => 'portfolio'));
while($custom_query->have_posts()): $custom_query->the_post();
echo $cqc; // Will output 0, 1, 2, 34
the_title();
endwhile;
echo $cqc; // Will output 0 again
endwhile;