第二个WordPress循环失败

时间:2016-12-12 09:12:48

标签: php wordpress

我在我的页面上运行了两个循环,用于从特定类别获取一组帖子,然后进一步从自定义帖子类型获取帖子但由于某种原因如果我输出它们,则第二个循环不显示如果我第一个注释出第二个确实显示了吗?

我有点困惑为什么?

第一圈更新

<?php

  $post_query = new WP_Query(array( 'category_name' => 'email-content'));

  if ( $post_query->have_posts() ) {

    echo '<div class="tabs tabs_default">';
    echo '<ul class="horizontal">';
    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
    } 

    echo '</ul>';

    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo '<div id="'.$title.'">';
      echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
      echo '<div>'.get_the_content().'</div>';
      echo '</div>';
    } 

    $post_query->reset_postdata();

  }
?>

SECOND LOOP UPDATED

我不需要其中一个循环,所以我进一步完善了代码,但我仍然没有运气第二次循环输出。

<?php

$featureThumb = new WP_Query( array(
    'post_type'         => 'resources',
    'meta_key'          => 'file_upload',
    'posts_per_page'    => -1
));

while ($featureThumb->have_posts()) : $featureThumb->the_post();

echo '<div>';

    if (has_post_thumbnail($post->ID)) {

        $thumb  = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'homepage-thumb-thumb' );
        echo '<img src="' . $thumb[0] . '" width="200" height="200" />' ;

    }; 

echo '<p><a href="'. get_field('file_upload') .'" target="_blank" download>Click here to download as PDF</a></p>';

endwhile;

unset($featureThumb); 

}

?>

2 个答案:

答案 0 :(得分:1)

您还必须在第一个循环结束时使用wp_reset_query();。所以第一个循环应该是:

<?php

  $post_query = new WP_Query(array( 'category_name' => 'email-content'));

  if ( $post_query->have_posts() ) {
    echo '<div class="tabs tabs_default">';
    echo '<ul class="horizontal">';
    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
    }
    echo '</ul>';

    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo '<div id="'.$title.'">';
      echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
      echo '<div>'.get_the_content().'</div>';
      echo '</div>';
    }

    wp_reset_query();
  }
?>

答案 1 :(得分:1)

您似乎有三个查询和四个循环,而不是两个。

此外,您应该删除}之后的额外unset($featureThumb);

您在问题中发布的三个查询是:

$post_query$loop$featureThumb。在最后一个你的循环是incorect。它使用第二个对象。更改循环中的第三个查询$loop $featureThumb

您需要在前两个查询之后使用wp_reset_postdata(),而不是根据某人的建议使用wp_reset_query(),并且它应该都有效。

wp_reset_query()确保主要查询已重置为原始主查询,而另一方面wp_reset_postdata()确保全局$post已恢复到当前帖子中主查询。

<强>更新

如果这不起作用,如果未定义全局$post对象,请尝试:

$post_query->reset_postdata();

$loop->reset_postdata();

更新2

您的第一个查询和循环应如下所示:

<?php

  $post_query = new WP_Query(array( 'category_name' => 'email-content'));

  if ( $post_query->have_posts() ) {

    echo '<div class="tabs tabs_default">';
    echo '<ul class="horizontal">';
    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo'<li><a href="#'.$title.'">'.get_the_title().'</a></li>';
    } 

    echo '</ul>';

    while ( $post_query->have_posts() ) {
      $post_query->the_post();
      $title = strtolower(get_the_title());
      $title = str_replace(' ', '-', $title);
      echo '<div id="'.$title.'">';
      echo '<div><button class="copy" id="'.$title.'" data-clipboard-text="'.get_the_content().'" title="Copy">Copy</button></div>';
      echo '<div>'.get_the_content().'</div>';
      echo '</div>';
    } 

    $post_query->reset_postdata();

  }
?>