2

我在我的网站上使用了两个自定义循环:

<?php $wp_query = new WP_Query("post_type=page&post=15"); while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php // content ?>
<?php endwhile; wp_reset_postdata(); ?>
<?php $wp_query = new WP_Query("post_type=page&post=15"); while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php // content ?>
<?php $wp_query = new WP_Query('showposts=3&post_type=contests&orderby=meta_value&meta_key=date&order=desc'); if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?>
<?php //content ?>
<?php endwhile; wp_reset_postdata(); else : ?>
<?php ... ?>
<?php endif; ?>

然后我想回到我的常规循环来检索新闻:

<?php rewind_posts(); ?>
<?php while(have_posts()) : <?php // content ?>
<?php endwhile;  ?>

但它什么也不返回(并且有要显示的帖子)。当我尝试运行一条if(have_posts...)语句时,它返回了false. 我做错了什么?

4

1 回答 1

1

你说的没有错;WordPress 是。那些与循环相关的函数设置和重置全局变量,使您失去状态,因为您正在嵌套 WP 循环。雪上加霜的是,您正在覆盖$wp_queryWP 循环相关功能的核心。

您可以通过多种方式解决这些问题。一种是在循环之外使用输出缓冲区来设置一些您可以进一步使用的变量。另一个可能是除了$q = new WP_Query(...)正常foreach循环之外根本不使用 API——不使用内置模板函数。

(如果你不理解它们,实际上学习 php 应该胜过这两个想法。说真的,不要在不知道至少足够的 php 来理解你所依赖的模板函数的源代码的情况下创建具有复杂逻辑的 WP 主题.)

于 2013-06-16T11:42:17.420 回答