首页 > 解决方案 > 类别中的 Woocommerce 搜索不起作用

问题描述

我正在以自己的主题在 Woocommerce 中开发商店。我的问题是,当我想通过查询 website.com/?s=product&product_cat=category 搜索类别中的产品时,我会得到该类别中所有产品的结果。我的页面: http://nsr.przedprojekt.com/wp/?s=kross&product_cat= rowery

在functions.php 中,我没有声明woocommerce,我也不想这样做。我试图覆盖archive-page.php 模板,但这也没有用。

标签: phpwordpresswoocommerce

解决方案


默认情况下,wordpress 搜索只接受一个参数:?s=your-term

要在 Wordpress 搜索中添加更多功能,您必须创建一个接受额外参数的新搜索配置。

例如。

如果要在特定类别中搜索,则必须创建一个自定义函数,如下所示:

// advanced search functionality
function advanced_search_query($query) {

    if($query->is_search()) {

        // your extra param is: in_category // &in_category=sample-category
        if (isset($_GET['in_category'])) {
            $query->set('category_name', $_GET['in_category']);
        }

        return $query;
    }

}
add_action('pre_get_posts', 'advanced_search_query', 1000);

顺便说一句,这还没有结束。

这是普通 Wordpress 类别中的自定义搜索,但这与为 Woocommerce 创建自定义搜索的逻辑相同。

很简单,您必须在 wordpress WP_Query 中添加更多查询变量,如下所示:

// advanced search functionality
function advanced_search_query($query) {

    if($query->is_search()) {
        if (isset($_GET['in_category'])) {

            $query->set('tax_query', array(array(
                'taxonomy' => 'product_cat',
                'field' => 'slug',
                'terms' => array($_GET['in_category']) )
            ));
        }

        return $query;
    }

}
add_action('pre_get_posts', 'advanced_search_query', 1000);

现在,您可以使用这样的 sintax: http://nsr.przedprojekt.com/wp/?s=kross&in_category= rowery


推荐阅读