Get_template_part पाश के साथ एक कस्टम WP_Query का उपयोग करना


9

मेरे पास एक कस्टम पोस्ट प्रकार के लिए एक क्वेरी है:

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$books = new WP_Query(array(
    'post_type' => 'wiki',
    'posts_per_page' => '50',
    'paged' => $paged
));
?>

और मैं इन पोस्ट के माध्यम से लूप-बुक्स का उपयोग करके लूप करना चाहता हूं।

<?php get_template_part( 'loop', 'books' ); ?>

लूप-बुक्स के अंदर। मेरे पास ये हैं, बस नियमित लूप की तरह। एफपी, मैंने बस $ पुस्तकों की क्वेरी के साथ काम करने के लिए has_posts और the_post फ़ंक्शन को बदल दिया है:

<?php if ( $books->have_posts() ) : ?>      
    <?php while ($books->have_posts()) : $books->the_post(); ?>
        <?php the_title(); ?><br/>
    <?php endwhile; ?>
<?php endif; ?>

लेकिन इसके बाद, मुझे एक php त्रुटि मिलती है:

Fatal error: Call to a member function have_posts() on a non-object in .../loop-books.php on line 1

ऐसा लगता है कि get_template_part फ़ंक्शन के अंदर $ पुस्तकें चर उपलब्ध नहीं है। मेरे द्वारा इस समस्या का समाधान कैसे किया जा सकता है? अगर मैं $ किताबों की क्वेरी को लूप-बुक्स के अंदर रख दूं। तो उसका काम ठीक रहेगा, लेकिन मैं उन्हें अलग करना चाहता हूं।


$books->लूप- books.php से हटाने की कोशिश करो और मुझे आशा है कि यह काम करेगा।
रोहित पांडे

अगर मैं $ पुस्तकों को हटा दूं- तो यह एक डिफ़ॉल्ट क्वेरी का उपयोग करेगा इसलिए मेरे लिए अच्छा नहीं होगा।
12

यदि आप कुछ का उपयोग कर रहे हैं: <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $books = new WP_Query(array( 'post_type' => 'wiki', 'posts_per_page' => '50', 'paged' => $paged )); ?>और यहाँ आप get_template_partक्वेरी लोड करते हैं । और इसके बाद अगर आप reset postdataमुझे लगता है कि मेरा समाधान ठीक से काम करेगा।
रोहित पांडे

जवाबों:


5

आपको या तो वैश्वीकरण करने की आवश्यकता होगी $books(यदि आप छड़ी करना चाहते हैं get_template_part()) या उपयोग करें

require( locate_template( 'loop-books.php' ) );

के बजाय get_template_part( 'loop', 'books' );। यह समस्या के कारण होता है $booksमें loop-books.phpकेवल में परिभाषित किया जा रहा गुंजाइश की get_template_part()


2
इस। हालाँकि, यदि $booksक्वेरी loop-books.phpटेम्पलेट-पार्ट फ़ाइल के लिए विशिष्ट है , तो मैं केवल $books = new WP_Query()कॉल को टेम्पलेट-पार्ट फ़ाइल के अंदर रखने की सलाह दूंगा ।
चिप बेनेट 12

धन्यवाद। अपनी राय दें, कौन सा बेहतर उपाय है?
१२:०५ पर १२

वही, वही @Chip - मैं भी इसे उसी फ़ाइल में डालूँगा और पहले स्थान पर समस्या से बचूँगा। इस असर को ध्यान में रखते हुए कि ओपी दोनों को अलग करना चाहता था।
जोहान्स पाइल

1
@passatgt जहां तक ​​बेहतर है, उपरोक्त टिप्पणियां देखें, मैं एक फाइल के साथ जाना चाहता हूं और इसके साथ किया जाना चाहिए। यदि आप उन्हें अलग करना चाहते हैं, तो मैं locate_template()विकल्प के साथ जाऊंगा , वैश्विक नाम स्थान को अव्यवस्थित करने के लिए नहीं।
जोहान्स पेल

ठीक है धन्यवाद। मैं उन्हें अलग करना चाहता हूं, क्योंकि मैं अन्य श्रेणियों / टैक्सोनोमी पर आधारित अन्य प्रश्नों के साथ एक ही लूप का उपयोग करना चाहता
हूं

8

एक वैकल्पिक विधि: लूप को खोलें / बंद करें, और फिर लूप सामग्री के लिए loop-books.phpकेवल मार्कअप को शामिल करने के लिए उपयोग करें । उदाहरण के लिए:

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
// Get books query
$books = new WP_Query(array(
    'post_type' => 'wiki',
    'posts_per_page' => '50',
    'paged' => $paged
));
// Open books loop
if ( $books->have_posts() ) :     
    while ($books->have_posts()) : $books->the_post();
        // Get loop markup
        get_template_part( 'loop', 'books' );
// Close books loop
    endwhile;
endif;
?>

फिर, अंदर loop-books.php:

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