对于我正在进行的一个项目,我需要两个不同的搜索表单。一种是在页面标题中始终可见的全局搜索表单,它搜索网站中的所有内容。然而,另一个只出现在新闻页面上,我需要它只搜索和显示“新闻”类别中的帖子。
我在搜索中使用以下代码。php,以便有两个独特的searchforms,其工作方式与预期一致
if(isset($_GET[\'search-type\'])) {
$type = $_GET[\'search-type\'];
if($type == \'main\') {
load_template(TEMPLATEPATH . \'/main-search.php\');
} elseif($type == \'news\') {
load_template(TEMPLATEPATH . \'/news-search.php\');
}
}
和在函数中。php我有这段代码,它在搜索结果页面上显示每页5篇文章,这是有效的,也是我想要的
function searchfilter($query) {
if ($query->is_search()) {
$query->set(\'posts_per_page\', 5);
}
return $query;
}
add_filter(\'pre_get_posts\', \'searchfilter\');
然而,对于第二个搜索表单,即新闻搜索。php,我需要一个只在类别“新闻”中搜索。我听说query\\u posts()很糟糕,所以我不应该使用它,但我如何才能做到这一点呢?如果答案非常简单或明显,我很抱歉,但我对Wordpress还是很陌生:)我已经在stackexchange和google上查看过了,但我很难将其整合起来。任何帮助都将不胜感激!
最合适的回答,由SO网友:s_ha_dum 整理而成
我听说query\\u posts()很糟糕,所以我不应该使用它,但我如何才能做到这一点呢?
对query_posts
很糟糕。你没听错。您已经完成了这方面的大部分工作。你拥有所有的部分。你只需要把它们混合一下。
function searchfilter($query) {
if ($query->is_search()) {
$query->set(\'posts_per_page\', 5);
if(isset($_GET[\'search-type\'])) {
$type = $_GET[\'search-type\'];
if($type == \'news\') {
$query->set(\'category_name\',\'news\'); // needs to be the slug not the name
}
}
}
return $query;
}
add_filter(\'pre_get_posts\', \'searchfilter\');