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.