web-dev-qa-db-ja.com

setup_postdata()が動作していないようですか?

理由はわかりませんが、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)を使用すれば問題なく動作することがわかりました。しかし、私は短い方が良いと思う

10
Jiew Meng

私は間違っているかもしれませんが、私が見ていることから、(query_postsだけではなく)カスタム選択クエリをするときは "setup_postdata()"を使うべきです: http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

同様に、 "the_title()"や "the_permalink()"のようなタグをそのカスタムのselectクエリで使いたいのであれば、変数名 $ post を使う必要があります。 setup_postdata()の中の変数名 - AS ASLL - あなたの "foreach"ループの前に global $ post を呼び出すべきです。

だから基本的にそのコーデックスリンクのその例に従ってください。そして変数名$ postを変更しないでください - さもなければそれはそれを壊します。

HTH

28
Jennifer Stuart

交換する

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

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

そのため、setup_postdata()とともに正確な$post変数を使用する必要があります。

24
WP-Silver

Setup_postdata()を使用している場所によっては(メインループや関数/サイドバーウィジェットなどに含まれていない場合など)、次のように宣言する必要もあります。

global $post;
6
David Gard

setup_postdata($post);ファミリーのコマンドなどを使用したい場合、global 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オブジェクトであることも確認してください。

4
Ryan Taylor

投稿を照会するときは、通常のループに一連の引数を渡して使用するだけです。最後にクエリをリセットします。

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