Php 类别中的Woocommerce搜索不';行不通

Php 类别中的Woocommerce搜索不';行不通,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我正在用我自己的主题开发Woocommerce商店。我的问题是,当我想通过query website.com/?s=product&product\u cat=category搜索类别中的产品时,我会得到该类别中所有产品的结果。我的网页: 在functions.php中,我没有声明woocommerce,我也不想这样做。我试图覆盖archive-page.php模板,但也没有成功。默认情况下,wordpress搜索只接受一个参数:?s=您的术语 要在Wordpress搜索中添加更多功能,您必须创

我正在用我自己的主题开发Woocommerce商店。我的问题是,当我想通过query website.com/?s=product&product\u cat=category搜索类别中的产品时,我会得到该类别中所有产品的结果。我的网页:


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

默认情况下,wordpress搜索只接受一个参数:?s=您的术语

要在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);
// 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);
顺便说一下,这还没有结束

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

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

// 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);
// 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: