目前尚不清楚何时使用其中一种,或者是否必须全部使用
如果您修改了全局$wp_query
变量(例如使用query_posts()
不应实际使用),然后使用wp_reset_query()
将变量还原回主查询,例如,当您调用have_posts()
, 它将检查主查询(是否包含任何帖子),而不是其他/自定义查询。
// This (should NOT be done and it) modifies the $wp_query global.
query_posts( \'posts_per_page=2\' );
while ( have_posts() ) {
the_post();
the_title( \'<h3>\', \'</h3>\' );
}
// This restores the $wp_query global back to the main query.
wp_reset_query();
如果修改了全局
$post
变量(例如使用
setup_postdata()
或者通过调用
the_post()
method 在辅助/自定义中
WP_Query
实例),然后使用
wp_reset_postdata()
将变量还原回主查询中的当前帖子,例如调用
the_title()
将在主查询中显示第二篇文章的标题,而不是在辅助查询中显示最后一篇文章的标题。
// Case 1: Calling the the_post() method in a custom WP_Query instance.
$query = new WP_Query( \'posts_per_page=2\' );
while ( $query->have_posts() ) {
// This modifies the $post global.
$query->the_post();
the_title( \'<h3>\', \'</h3>\' );
}
// Restore the $post global back to the current post in the main query.
wp_reset_postdata();
// Case 2: Using setup_postdata().
global $post;
$posts = get_posts( \'posts_per_page=2\' );
foreach ( $posts as $post ) {
// This modifies the $post global.
setup_postdata( $post );
the_title( \'<h3>\', \'</h3>\' );
}
// Restore the $post global back to the current post in the main query.
wp_reset_postdata();
所以在上面的两个例子中,我们只调用
wp_reset_postdata()
没有必要打电话
wp_reset_query()
因为这两个查询都没有修改主查询(或全局查询
$wp_query
变量)。
因此,如果$wp_query
全局未修改,则无需调用wp_reset_query()
, 如果$post
全局未修改,则无需调用wp_reset_postdata()
. 一、 e.只给其中一个打电话。
其他注释query_posts()
将更改主查询,并且not recommended. 仅在绝对必要时使用。创建的新实例WP_Query
或get_posts()
二次回路首选。如果要修改主查询,请使用pre_get_posts
行动
在a中pre_get_posts
hook,你可以使用is_main_query()
method 在传递的查询对象中,检查当前查询是否为主查询。钩子也是一样,比如posts_orderby
它将查询对象传递(如果请求)到挂钩回调。
钩子在WP_Query
同时在管理端激发(wp-admin
), 所以你可以使用is_admin()
以避免更改管理上的主查询,除非您打算这样做。
我不太确定你问题的要点(或你想要的确切答案),但我希望这个答案能有所帮助。: