setup_postdata () tampaknya tidak berfungsi?


12

Saya tidak yakin mengapa, tetapi saya sudah terbiasa get_posts()menanyakan beberapa data. Lalu saya menggunakan setup_postdata()... Saya pikir itu digunakan sehingga saya dapat menggunakan fungsi seperti the_permalink()dll dengan data posting baru?

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

tetapi tampaknya hanya the_excerptberisi nilai data posting baru, mengapa begitu? Saya menemukan bahwa jika saya menggunakannya echo get_the_permalink($cp)berfungsi dengan baik. Tapi saya pikir versi yang lebih pendek akan lebih baik

Jawaban:


32

Saya mungkin salah, tetapi dari apa yang saya lihat, "setup_postdata ()" harus digunakan ketika melakukan kueri pemilihan khusus (bukan hanya query_posts): http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

Selain itu, jika Anda ingin menggunakan tag seperti "the_title ()" dan "the_permalink ()" dengan kueri pemilihan khusus ... Anda harus menggunakan nama variabel $ post secara khusus (bukan nama variabel lain) di setup_postdata ( ) - SERTA - Anda harus menelepon global $ post sebelum loop "foreach" Anda ...

Jadi pada dasarnya ikuti contoh itu di tautan kodeks itu. Dan jangan mengubah nama variabel $ post - jika tidak maka akan merusaknya.

HTH


2
"Anda harus menghubungi global $ post". IYA! Mengapa itu tidak ada dalam Codex
AlxVallejo

27

Ganti

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

dengan

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

Jadi, Anda perlu menggunakan $postvariabel yang tepat bersama dengan setup_postdata().


Ini memperbaiki masalah yang saya alami. Cheers mate
Jeff K.

2
Seseorang membelikan bir untuk pria ini! Terima kasih .. Adakah yang tahu mengapa / bagaimana variabel lokal dapat mengacaukannya setup_postdata()?
Odys

Aneh. Tampaknya tidak masuk akal untuk memerlukan nama variabel tertentu ketika Anda meneruskannya sebagai parameter.
Gavin

6

Tergantung di mana Anda menggunakan setup_postdata () (jika tidak di loop utama, atau di widget fungsi / sidebar, misalnya), Anda mungkin juga perlu mendeklarasikan -

global $post;

4

global post;tidak berfungsi setup_postdata($post);jika Anda ingin menggunakan the_title()keluarga perintah dll.

Ada di https://codex.wordpress.org/Function_Reference/setup_postdata

Sebaliknya gunakan

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

... juga pastikan $post_objectobjek WP_Post Anda valid.


1
Jawaban ini sebenarnya memecahkan masalah, alih-alih memarahi OP: p
nodws

1

Saat meminta posting, gunakan saja loop normal dengan serangkaian argumen yang dilewatkan ke dalamnya. Kemudian setel ulang kueri di akhir.

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

Terima kasih, ini berhasil. Tapi hanya untuk pengertian, tahukah Anda mengapa setup_postdata()tampaknya tidak berhasil? Apakah saya salah menggunakannya?
Jiew Meng

1
@jiewmeng - Lihat apakah menggunakan $postalih-alih $cpmemperbaiki masalah.
t31os

Saya memilih saran perbaikan @ t31os. Contoh-contoh pada kodeks menunjukkan penggunaan seperti itu dan $ post adalah variabel khusus di WordPress sehingga mungkin melakukan lebih banyak di dalam loop daripada apa yang Anda gunakan.
curtismchale

@ t31os, @curtismchale, sepertinya tidak berhasil juga. Itu masih memberikan hasil yang sama
Jiew Meng
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.