setup_postdata () काम नहीं कर रहा है?


12

मुझे यकीन नहीं है कि क्यों लेकिन मैंने get_posts()कुछ डेटा के लिए क्वेरी करने के लिए उपयोग किया है। फिर मैंने उपयोग किया setup_postdata()... मुझे लगता है कि इसका उपयोग किया गया है ताकि मैं the_permalink()नए पोस्ट डेटा के साथ फ़ंक्शन आदि का उपयोग कर सकूं?

<?php foreach ($childPosts as $cp) : setup_postdata($cp); ?>

<article <?php post_class() ?> id="post-<?php the_ID(); ?>">
  <h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
  <?php if (has_post_thumbnail()) : ?>
  <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(($hasOutputNotFeaturedDiv) ? 'thumb-small' : null) ?></a>
  <?php endif; ?>
  <?php the_excerpt(); ?>
  <p class="more"><a href="<?php the_permalink() ?>">Read more ...</a></p>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>

<?php endforeach; ?>

लेकिन ऐसा प्रतीत होता है कि केवल the_excerptनए पोस्ट डेटा मूल्य में शामिल है, ऐसा क्यों है? मुझे लगता है कि अगर मैं इसका उपयोग echo get_the_permalink($cp)करता हूं तो ठीक है। लेकिन मुझे लगता है कि छोटा संस्करण बेहतर होगा

जवाबों:


32

मैं गलत हो सकता हूं, लेकिन जो मैं देख रहा हूं, उससे "select_postdata ()" का उपयोग कस्टम चयन क्वेरी करते समय किया जाना चाहिए (न केवल query_posts): http://codex.wordpress.org/Displaying_Posts-Using_a_Custom_Select_Query

साथ ही, यदि आप उस कस्टम सिलेक्ट क्वेरी के साथ "the_title ()" और "the_permalink ()" जैसे टैग का उपयोग करना चाहते हैं ... तो आपको setup_postalata () में विशेष रूप से वेरिएबल नाम $ पोस्ट (कोई अन्य वैरिएबल नाम) का उपयोग करने की आवश्यकता होगी ) - एएस वेल - आपको अपने "फॉर्च्यूनर" लूप से पहले वैश्विक $ पोस्ट को कॉल करना चाहिए ...

तो मूल रूप से उस कोडेक्स लिंक में उस उदाहरण का पालन करें। और परिवर्तनशील नाम $ पोस्ट को न बदलें - अन्यथा यह इसे तोड़ देता है।

HTH


2
"आपको वैश्विक $ पोस्ट को कॉल करना चाहिए"। हाँ! कोडेक्स में ऐसा क्यों नहीं है
AlxVallejo

27

बदलो

foreach ( $childPosts as $cp ) : setup_postdata( $cp );

साथ में

foreach ( $childPosts as $post ) : setup_postdata( $post );

तो आप $postके साथ सटीक चर का उपयोग करने की आवश्यकता है setup_postdata()


इससे मुझे होने वाली समस्या ठीक हो गई। चीयर्स मेट
जेफ के।

2
कोई इस आदमी को एक बीयर खरीद कर दे! धन्यवाद .. कोई विचार क्यों / कैसे एक स्थानीय चर के साथ गड़बड़ कर सकता है setup_postdata()?
Odys

अजीब। जब आप इसे एक पैरामीटर के रूप में पारित कर रहे हैं, तो एक विशिष्ट चर नाम की आवश्यकता के लिए यह बहुत ही अतार्किक लगता है।
गैविन

6

इस बात पर निर्भर करते हुए कि आप कहां सेटअप_पॉस्टडेटा () का उपयोग कर रहे हैं (यदि यह मुख्य लूप में नहीं है, या किसी फंक्शन / साइडबार विजेट में, उदाहरण के लिए), तो आपको घोषणा करने की भी आवश्यकता हो सकती है -

global $post;

4

global post;setup_postdata($post);यदि आप the_title()कमांड आदि के परिवार का उपयोग करना चाहते हैं तो काम नहीं करता है ।

यह https://codex.wordpress.org/Function_Reference/setup_postdata में है

इसके बजाय उपयोग करें

// global $post; setup_postdata($post_object); //don't do this!
setup_postdata( $GLOBALS['post'] =& $post_object );

... यह भी सुनिश्चित करें कि आपका $post_objectमान्य WP_Post ऑब्जेक्ट है।


1
यह उत्तर वास्तव में समस्या को हल करता है, बजाय ओपी को
डांटने के

1

जब क्वेरीज़ पोस्ट सामान्य लूप का उपयोग करते हैं तो उसमें दिए गए तर्कों का एक सेट होता है। फिर अंत में क्वेरी रीसेट करें।

<?php 

    // makes query respect paging rules
    $paged = get_query_var('paged');

    // defining the arguements for the custom loop
    $variablenameQuery = array(
        'post_type'                 => 'seating-charts',
        'post_status'               => 'publish',
        'cust_tax_name'             => 'custom-tax-term',
        'posts_per_page'            => -1, // neg 1 means all posts
        'orderby'                   => 'date',
        'order'                     => 'ASC',
        'paged'                     => $paged,
    ); // end query

    // pass result into query_posts to get result
    query_posts($variablenameQuery);

?>
<?php if (have_posts()) : ?>

    <?php while (have_posts()) : the_post(); ?>

        <?php // Individual Post Styling ?>

    <?php endwhile; ?>

        <?php // paged navigation - next post, previous post... ?>

    <?php else : ?>

    <h3>Ooops looks like there was an issue. Please <a href="<?php echo get_option('home'); ?>/contact" title="Contact Us">get in touch</a> with us and we'll get the problem fixed.</h3>

<?php endif; ?>

<!-- resets the WordPress Query -->
<?php wp_reset_query(); ?>

धन्यवाद, यह काम करता है। लेकिन सिर्फ समझने के लिए, क्या आप जानते हैं कि setup_postdata()काम क्यों नहीं दिखता है? क्या मैंने इसका गलत इस्तेमाल किया?
Jiew मेंग

1
@jiewmeng - समस्या $postको $cpठीक करने के बजाय उपयोग करें देखें ।
t31os

मैं फिक्स @ t31os का सुझाव देता हूं। कोडेक्स पर दिए गए उदाहरणों का उपयोग उस तरह और $ पोस्ट वर्डप्रेस में एक विशेष चर है, इसलिए यह आपके द्वारा उपयोग किए गए से अधिक लूप के अंदर कर सकता है।
करिश्माईचेल

@ t31os, @curtismchale, वह भी काम नहीं करता था। यह अभी भी एक ही परिणाम देता है
Jiew मेंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.