setup_postdata () çalışmıyor mu?


12

Neden olduğundan emin değilim ama get_posts()bazı verileri sorgulamak için kullandım . Sonra kullandım setup_postdata()... the_permalink()Yeni yazı verileriyle vs gibi fonksiyonları kullanabilmem için kullanıldığını düşünüyorum.

<?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; ?>

ancak görünen o ki sadece the_excerptyeni yazı verisi değeri var, neden böyle? Eğer kullanırsam echo get_the_permalink($cp)işe yarıyor. Ama kısa versiyonun daha iyi olacağını düşünüyorum

Yanıtlar:


32

Yanılıyor olabilirim, ancak gördüğüm kadarıyla "setup_postdata ()" özel bir seçim sorgusu (yalnızca query_posts değil) yaparken kullanılmalıdır: http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

Ayrıca, bu özel seçim sorgusu ile "the_title ()" ve "the_permalink ()" gibi etiketleri kullanmak istiyorsanız ... setup_postdata'da özel olarak $ post değişken adını (başka bir değişken adı değil) kullanmanız gerekir. ) - AS WELL - "foreach" döngünüzden önce global $ post'u çağırmalısınız ...

Temel olarak bu kodeks bağlantısındaki örneği izleyin. Ve $ post değişken adını değiştirmeyin - aksi halde bozar.

HTH


2
msgstr "global $ post'u aramalısınız". EVET! Neden
Kodeks'de

27

Değiştirin

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

ile

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

Bu nedenle, tam $postdeğişkeni ile birlikte kullanmanız gerekir setup_postdata().


Bu yaşadığım sorunu düzeltti. Şerefe dostum
Jeff K.

2
Birisi bu adama bir bira alıyor! Teşekkür ederim .. Yerel bir değişkenin neden / nasıl karışabileceği hakkında herhangi bir fikir setup_postdata()?
Odys

Tuhaf. Parametre olarak geçirirken belirli bir değişken adı gerektirmek mantıksız görünüyor.
Gavin

6

Setup_postdata () yöntemini kullandığınız yere bağlı olarak (ana döngüde veya örneğin bir işlev / kenar çubuğu widget'ında değilse) ayrıca şunları bildirmeniz gerekebilir -

global $post;

4

global post;komutlar ailesini vb. setup_postdata($post);kullanmak istiyorsanız ile çalışmaz the_title().

Bu öyle https://codex.wordpress.org/Function_Reference/setup_postdata

Bunun yerine kullanın

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

... ayrıca $post_objectgeçerli bir WP_Post nesnesi olduğundan emin olun .


1
Bu cevap aslında
OP'yi

1

Yayınları sorgularken, normal döngüyü içine bir dizi argüman geçirerek kullanın. Sonra sonunda sorguyu sıfırlayın.

<?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(); ?>

Teşekkürler, bu işe yarıyor. Ama sadece anlamak için neden setup_postdata()işe yaramadığını biliyor musunuz ? Yanlış mı kullandım?
Jiew Meng

1
@jiewmeng - Sorunun $postyerine kullanılıp kullanılmadığına bakın $cp.
t31os

@ T31os'un önerdiği düzeltmeye oy veriyorum. Kodeks örnekleri, bunun gibi kullanımı gösterir ve $ post, WordPress'te özel bir değişkendir, bu nedenle bir döngü içinde kullandığınızdan daha fazlasını yapabilir.
curtismchale

@ t31os, @curtismchale, bu da işe yaramadı. Hala aynı sonucu veriyor
Jiew Meng
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.