循环中的WP_Query创建无限循环

时间:2016-04-27 07:57:05

标签: wordpress

在我的Wordpress页面上,我想实现以下目标:

<小时/> {TITLE OF PAGE}

enter image description here

{MY PAGE CONTENT}

我为信用卡图标创建了一个帖子格式图片,并对该帖子的内容进行了wp查询。但是一旦这个查询出现在循环中,它就会永远循环... 它永远不会发布我的页面内容...输出看起来像下面的例子。我怎么告诉WP我只想让那一排图标出现一次然后回到我的页面并发布内容?

<小时/> {我的页面标题}

enter image description here

{图标标题}

enter image description here

{图标标题}

enter image description here

{图标标题}

enter image description here

等等等

<小时/> 然而,我的wp_query进入循环,这导致图像首先出现,然后是帖子标题的无限循环,然后是图像。

我的代码是:

<?php
// Start the loop.
while ( have_posts() ) : the_post();
?>
<!-- The following is included using get_template_part 
     But am copying the code here for ease of reading -->

    <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <header class="entry-header"><h1><?php the_title(); ?></h1>

        <!-- Start WP Query for credit card images -->
        <?php
            $temp = $wp_query; $wp_query= null;
            $wp_query = new WP_Query(); $wp_query->query("category_name=credit-cards-accepted");
        while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
            <div class="credit-cards"><?php the_content(); ?></div>
        <?php endwhile; ?>
        <!-- End WP Query for credit card images -->

        </header><!-- .entry-header -->

        <div class="entry-content">
            <?php the_content(); ?>
        </div><!-- .entry-content -->

    </article><!-- #post-## -->

<!-- Get template part ends -->
<!-- The remainder of the page.php template continues from here -->

2 个答案:

答案 0 :(得分:0)

您必须在自定义查询和内循环后恢复原始发布数据:

/* restore original post data after endwhile; */
wp_reset_postdata();

有关wp_reset_postdata()

的更多信息

编辑:

您可能也在某处覆盖了$ wp_query global,因为您将其设置为$temp。同时致电wp_reset_query()$wp_query和全球发布数据恢复为原始主查询。

有关wp_reset_query()

的更多信息

答案 1 :(得分:0)

我建议您以不同的方式命名新查询,因此它不会干扰主循环。尝试命名$ loop2或类似的东西。

另外,请注意,通过调用循环的方式,您可以将其添加到常规页面循环中显示的每个帖子/文章中(如果您在那里显示多个帖子)。

如果你想让它显示如下:

  • 信用卡图片
  • page post1
  • page post2
  • page post3 ...

您需要在主循环之前调用它(否则会在另一个之后调用一篇文章/帖子并在那里输入您的图像行) 试试吧:

<?php
    $loop2 = new WP_Query( array ('category_name'=> 'credit-cards-accepted' )); 

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

        ?>
         <div class="credit-cards">             
          <?php the_content(); ?>
         </div>
        <?php
        endwhile; // end of the credit cards accepted loop. 
        ?>

 // Start the page loop.
 while ( have_posts() ) : the_post();
 ?>