我有一个自定义标签搜索功能,允许人们搜索多个标签以返回相关帖子。表示他们希望看到标记为“Wordpress”和“Tutorials”的帖子。我正在使用template_include
过滤器,如下所示:
public static function template_redirect( $template ) {
if( isset($_GET[\'tag-search\']) )
{
$template = locate_template( array(
\'search.php\',
\'archive.php\',
\'index.php\'
));
}
return $template;
}
thetag-search
变量保存分类法的名称,我检查它是否已设置,从而指示正在执行搜索。在这一点上template
解析为搜索。php,就像它应该的那样。所以这很好。
在pre_get_posts
操作I添加atax_query
要将返回的帖子修改为仅选定的标签,我设置is_search
为真,以及is_home
为false。这是我的pre_get_posts
措施:
public static function pre_get_posts($query) {
if( !isset($_GET[\'tag-search\']) || !isset($_GET[\'terms\']) ) return $query;
if( strtolower( $_GET[\'method\'] ) == \'and\' )
{
$query->set( \'tax_query\', array(
array(
\'taxonomy\' => $_GET[\'tag-search\'],
\'field\' => \'slug\',
\'terms\' => explode(\',\', $_GET[\'terms\']),
\'operator\' => \'AND\'
)
) );
}
else
{
$query->set( \'tax_query\', array(
array(
\'taxonomy\' => $_GET[\'tag-search\'],
\'field\' => \'slug\',
\'terms\' => explode(\',\', $_GET[\'terms\'])
)
) );
}
$query->is_search = true;
$query->is_home = false;
return $query;
}
然而,当我执行搜索时,body类是“home”,所有is_home
和is_front_page
条件是true, 他们不应该这样,因为我只是特别声明我希望这是一个搜索模板,对吗?我知道这是可以做到的-当我添加&s
对于查询字符串,它按其应该的方式工作-尽管这样有点难看。有什么见解吗?