$QUERY->应该与条件标记一起使用吗?

时间:2021-07-18 作者:Ryan

下面的功能将搜索结果仅限于帖子。

function exclude_pages_from_search_results( $query ) {
    if ( $query->is_main_query() && $query->is_search() ) {
        $query->set( \'post_type\', array( \'post\' ) );
    }    
}
应该$query->与条件标记一起使用,例如is_home(), is_search()? 如果没有,为什么?如果是,为什么?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

作为背景,WordPress中有一些函数可以告诉您有关主查询的某些事情。例如is_search(), is_archive() etc.将分别告诉您主查询是搜索查询还是存档查询。这些通常(但不一定)与某些模板的使用位置一致。

如果您想了解有关主查询的信息,从而了解您正在查看的页面类型,那么可以使用这些函数。但是,请注意,主查询是WP_Query, 但是开发人员可以通过创建自己的WP_Query.

的实例WP_Query 对象具有这些条件函数的等价项methods. 如果您想了解这些特定查询的相同内容,即使它不是主查询,也可以使用这些方法。例如(假设我们不在搜索页面上):

$query = new WP_Query( array( \'s\' => \'Search term\' ) );

var_dump( $query->is_search() ); // true
var_dump( is_search() ); // false
事实上,大多数与查询相关的条件函数只是在主查询上调用这些方法的别名。例如is_archive() 与此完全相同:

global $wp_query;
return $wp_query->is_archive();
因此,您将这些函数用作方法(即$query->) 如果您需要知道该查询是否匹配该条件。或者使用裸函数检查主查询是否与该条件匹配。

请注意,没有什么特别的$query->. $query 只是一个变量,其中包含WP_Query. 因此,在进行检查时,您需要替换$query 以实例WP_Query

当涉及到使用pre_get_posts, 请注意,此操作应用于页面上的所有查询,而不仅仅是主查询。当您向该钩子添加操作时,当前应用钩子的查询将作为第一个参数传递给回调,因此您应该对照该变量检查条件,以仅将更改应用于与条件匹配的查询。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post