为了提供更具体的帮助,我们需要更详细地了解您不期望发生的事情,或者您期望发生的事情没有发生,或者发生的事情与您期望的不同。
也就是说,至少有两件事可能会对你有所帮助:
使用描述性和唯一的变量名保存自定义查询,包括if ( have_posts() )
部分循环调用wp_reset_postdata()
而不是wp_reset_query()
变量名称
使用通用变量
$arg
保存自定义查询参数和泛型变量
$loop
保存两个自定义查询。相反,我建议:
$slider_query_args = array( \'post_type\' => \'slider\');
$slider_query = new WP_Query( $slider_query_args );
。。。和
$teaser_query_args = array( \'post_type\' => \'teaser\');
$teaser_query = new WP_Query( $teaser_query_args );
这样做可以使您的代码更易于阅读/遵循,有助于确保您不会混合使用两个自定义查询,并有助于避免在两个自定义查询调用中出现意外后果。
使用的全循环调用:
while ( $loop->have_posts() ) : $loop->the_post();
相反,请使用:
if ( $slider_query->have_posts() ) : while ( $slider_query->have_posts() ) : $slider_query->the_post();
// Loop output
endwhile; endif;
。。。和
if ( $teaser_query->have_posts() ) : while ( $teaser_query->have_posts() ) : $teaser_query->the_post();
// Loop output
endwhile; endif;
自定义查询后重置Post数据
Note: This one may very likely be your main problem.
这个
wp_reset_query()
功能旨在重置
main query 更改后(例如通过
query_posts()
). 由于您没有更改主查询
wp_reset_query()
对你没有任何帮助。
相反,使用wp_reset_postdata()
, 其目的是重置$post
全局变量和所有相关模板标记(例如。the_title()
, the_content()
, the_permalink()
, 再次参考主查询。既然你打电话来了the_post()
在自定义查询循环中,您需要使用wp_reset_postdata()
:
// Slider Loop
if ( $slider_query->have_posts() ) : while ( $slider_query->have_posts() ) : $slider_query->the_post();
// Loop output
endwhile; endif;
// Rest postdata
wp_reset_postdata();
// Teaser Loop
if ( $teaser_query->have_posts() ) : while ( $teaser_query->have_posts() ) : $teaser_query->the_post();
// Loop output
endwhile; endif;
// Rest postdata
wp_reset_postdata();
// Main Query Loop
if ( have_posts() ) : while ( have_posts() ): the_post();
// Loop output
endwhile; endif;