web-dev-qa-db-ja.com

setup_postdataが機能していないようです

setup_postdata()に問題があります。私の理解から、the_permalink()the_title()のような関数を使いたいのなら、setup_postdata()を使わなければなりません。

現在、the_permalink()またはthe_title()は何も返しません(空白)。私はecho get_the_title()でも何が起こるのかを確かめようとしましたが、それでも同じ結果が得られます。

問題に関連するコードは次のとおりです。

  $posts = get_posts($args);
  foreach($posts as $post) {
    setup_postdata($post);
  ?>
  <article class="col two tablet-four mobile-six box">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
      <div class="featured-image">
      <?php if(has_post_thumbnail(get_the_ID())): ?>
        <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), array(650,200)); ?>
        <div style="background: url('<?php echo $image[0]; ?>') center center no-repeat;"></div>
      <?php endif; ?>
      </div>
      <section class="content">
        <?php $cat = get_the_category(get_the_ID()); ?>
        <span class="category"><?php echo $cat[0]->cat_name; ?></span>
        <?php the_title(); ?>
        <?php the_excerpt(); ?>
      </section>
    </a>
  </article>
  <? }
  wp_reset_postdata();

したがって、基本的に、このコードはAJAX要求のコールバック関数である関数内にあります。この機能は、次のページのボタンをクリックしている人をシミュレートするために次の一連の投稿を取得します。

get_posts()の後、$posts変数に適切な投稿が追加されるので、何かが得られます。

今のところ、データを含まないタグだけで応答します。

ありがとう。

1
Koralarts

Codex によると、最初の部分で最も重要なglobal $post;をスキップするようです。

global $post;
$posts = get_posts($args);
  foreach($posts as $post) {
    setup_postdata($post);
  ?>
  <article class="col two tablet-four mobile-six box">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
      <div class="featured-image">
      <?php if(has_post_thumbnail(get_the_ID())): ?>
        <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id(get_the_ID()), array(650,200)); ?>
        <div style="background: url('<?php echo $image[0]; ?>') center center no-repeat;"></div>
      <?php endif; ?>
      </div>
      <section class="content">
        <?php $cat = get_the_category(get_the_ID()); ?>
        <span class="category"><?php echo $cat[0]->cat_name; ?></span>
        <?php the_title(); ?>
        <?php the_excerpt(); ?>
      </section>
    </a>
  </article>
  <? }
  wp_reset_postdata();
3
1fixdotio