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.