让我们一步一步地将其分解:
if ($query->is_search && is_page_template(\'search\')) {
这里有三个问题
is_page_template
search.php
不是页面模板,这不是加载搜索模板的方式。所以这行不通。
但如果它真的起作用了,就会有一个新问题。功能,如is_page_template
etc依赖于主查询,但我们处于pre_get_posts
筛选时,您不知道该查询是否已设置,或者是否正在筛选该查询或其他查询。
因此,我们需要:
移除is_page_template
检查,它不会做你认为它做的事添加一个$query->is_main_query()
选中此复选框,使筛选器不会干扰小部件和其他查询方法与成员变量
if ($query->is_search
这不起作用,应该为您生成PHP警告。问题是
is_search
函数/方法不是变量,它应该是:
if ( $query->is_search() && $query->is_main_query() ) {
但是search.php
?
WordPress根据主查询决定加载哪个模板。如果它是主查询,并且
is_search
那是真的
search.php
将加载。
因此,WordPress还没有决定在进行筛选时使用哪个模板。事实上,您可以通过修改查询变量来更改WordPress加载的模板。例如,如果您取消设置所有变量,并告诉它加载一篇文章,您将不会得到search.php
, 或者一个档案single.php
相反
页面模板中的搜索查询如何
is_main_query
将为false,因此不是问题