Filtering search results

时间:2016-04-14 作者:Saif Islam

我的网站上有网页、帖子和woocommerce产品类别和产品。我想限制wordpress的默认搜索查询,以便它返回帖子、页面、产品类别,但NOT 单个产品。我在我的functions.php 使用它,我可以轻松地只显示帖子和页面。我现在需要的是在搜索结果中显示woocommerce产品类别以及我的帖子和页面,但是NOT 单个产品。请帮帮我。

function searchfilter($query) {

if ($query->is_search && !is_admin() ) {
    $query->set(\'post_type\',array(\'post\',\'page\'));
}

return $query;
}

add_filter(\'pre_get_posts\',\'searchfilter\');

2 个回复
最合适的回答,由SO网友:Monkey Puzzle 整理而成

您可能需要包括Woocommerce分类法的tax\\u查询(称为“product\\u cat”):

    $tax_query = array(
        array(
            \'taxonomy\' => \'product_cat\'
        ),
    );
    $query->set( \'tax_query\', $tax_query );   
}

return $query;
}
但是,您必须确保可以返回帖子、页面和产品类别,并注意搜索结果会混淆在一起。

我会想到一个更好的解决方案,而不是在函数中进行过滤。php级别,将适应您的搜索。php用于显示搜索结果。然后,您可以非常有针对性,例如,显示:

Posts with this search include:
PostX, PostY, PostZ.
然后是另一个循环:

Pages with this search include:
PageA, PageB, PageC.
然后是另一个循环:

Product Categories with this search include:
Product Cat A, Product Cat F, Product Cat Z.
这就是你想要的结果,还是你想过滤你网站上的每一个搜索结果并将结果混合在一起?

SO网友:Emin Özlem
add_action(\'pre_get_posts\',\'search_filter_exc_posts\');
function search_filter_exc_posts($query) {
    // Verify that we are on the search page & this came from the search form
    if($query->query_vars[\'s\'] != \'\' && is_search())
    {
        $q_tax_query = $query->query_vars["tax_query"];
        // append product categories to current tax query.
        $query->set(\'tax_query\', $q_tax_query[]=array(\'taxonomy\'=>\'product_cat\') );
    }
}

相关推荐

在WP搜索表单中是否有类似`wp_Dropdown_Categories()`的输入复选框选项?

我有自定义的帖子类型,当前正在使用wp_dropdown_categories() 在WP搜索表单中的功能,以便人们能够按薪资级别和工作类型进行筛选。是否有一个等效函数,以便用户可以使用输入复选框元素而不是<select> 元素,以便他们在进行搜索时可以选择多个工作类型或薪资水平?我似乎在开发者文档中找不到任何东西。我正在寻找的是允许复选框替换使用下面代码中的select选项的下拉元素的东西。<form method="get" action="<?p