每页有两个不同类别/帖子的搜索表单

时间:2013-11-20 作者:Zonzio

对于我正在进行的一个项目,我需要两个不同的搜索表单。一种是在页面标题中始终可见的全局搜索表单,它搜索网站中的所有内容。然而,另一个只出现在新闻页面上,我需要它只搜索和显示“新闻”类别中的帖子。

我在搜索中使用以下代码。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上查看过了,但我很难将其整合起来。任何帮助都将不胜感激!

1 个回复
最合适的回答,由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\');

结束

相关推荐

无法使用WP_QUERY将“Search Value”和“Tax_Query”组合在一起

这是我在模板函数中的函数。php。问题是这是可行的:function ajax_search_action_do(){ global $wp_query; $search = $_POST[\'search_value\']; $country = $_POST[\'country_value\']; $args = array( \'s\' => $search,