有很大的不同。。。大多数时候。
is_home()
, 就像任何其他条件标记一样,检查main query.
$query->condition()
检查通过操作传递的查询对象,该对象可以是完全不同的查询,因为pre_get_posts
需要all 查询。
例如,假设您正在查看singular post, 和内部single.php
您有:
$q = new WP_Query( array(\'nopaging\'=>true) );
现在让我们假设
functions.php
您有:
add_action(\'pre_get_posts\', function ($query) {
if( $query->is_home() ) {
// conditional code
}
} );
当主查询和辅助查询都触发操作时,挂钩回调将运行。
然而,对于主查询,条件代码会not 运行,因为您处于单数post视图中,但当由辅助查询条件代码激发时will 运行,因为辅助查询对象是主类型。
所以使用$query->is_home()
也没有is_home()
, 它们只是不同而已,你应该根据你想要得到的结果来选择一个或另一个。
但是,当操作传递的查询对象是主查询时,这两种方法是相同的,因此如果只想检查主查询对象,使用其中一种方法没有任何区别:
function theme_pgp( $query ) {
if ( ! $query->is_main_query() ) {
return; // only main query
}
// here using is_home() or $query->is_home()
// does not make any difference
}