我在我的网站上使用了两个自定义循环:
<?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
。我做错了什么?
答案 0 :(得分:1)
你说每个人都没有错; WordPress是。这些循环相关的函数设置和重置全局变量,使你失去状态,因为你正在嵌套WP循环。更糟糕的是,你要覆盖$wp_query
,这是WP循环相关函数的核心。
您可以通过多种方式解决这些问题。一种方法是在循环外部使用输出缓冲区来设置一些可以进一步使用的变量。另一种可能是在$q = new WP_Query(...)
和普通foreach
循环之外根本不使用API - 不使用内置模板函数。
(实际上学习php应该胜过这两个想法,如果你不理解它们。严重的是,不要创建一个具有复杂逻辑的WP主题,而不知道至少有足够的php来理解模板函数的源代码''依靠。)