为了提供更具体的帮助,我们需要更详细地了解您不期望发生的事情,或者您期望发生的事情没有发生,或者发生的事情与您期望的不同。
也就是说,至少有两件事可能会对你有所帮助:
使用描述性和唯一的变量名保存自定义查询,包括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;