Php 向电子商务产品查询添加搜索关键字

Php 向电子商务产品查询添加搜索关键字,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我正在通过Woocommerce产品类别页面上的pre_get_帖子和URL查询设置自定义Woocommerce搜索功能。分类法和元值过滤器工作正常,但我在添加关键字搜索(我想搜索产品标题和描述)时遇到问题。我在搜索表单中有一个文本输入,作为?partdescription=FOO追加到url,我试图获取该变量并将其插入到主查询中 这就是我到目前为止所做的: add_action('pre_get_posts','alter_query'); function alter_query($que

我正在通过Woocommerce产品类别页面上的pre_get_帖子和URL查询设置自定义Woocommerce搜索功能。分类法和元值过滤器工作正常,但我在添加关键字搜索(我想搜索产品标题和描述)时遇到问题。我在搜索表单中有一个文本输入,作为?partdescription=FOO追加到url,我试图获取该变量并将其插入到主查询中

这就是我到目前为止所做的:

add_action('pre_get_posts','alter_query');

function alter_query($query) {
    global $wp_query;

    // checks if we're on a shop category page
    if ($query->is_main_query() && is_product_category()) {
        // Set up Filters from URL Query
        $urlQuery = $_GET;

        // Part Description
        $description = isset($urlQuery['partdescription']) ? $urlQuery['partdescription'] : NULL;

        // Only modify the query for the parts category
        if ($query->query_vars['product_cat'] == 'parts') {

            if (!empty($description)) $query->set('s', $description);

        }

    }

}
这种方法在设置分类法和元查询时效果很好,但修改“s”会引发一系列类似这样的错误:

[19-Jul-2018 20:47:59 UTC] WordPress database error Unknown column 'Array' in 'group statement' for query SELECT   wp_posts.* FROM wp_posts  WHERE 1=1  AND wp_posts.ID IN (129,131,132,150,151,152,256,257,258,259,260,263,271,272,273,275,321,371,427,428) AND wp_posts.post_type = 'nav_menu_item' AND ((wp_posts.post_status = 'publish')) GROUP BY Array ORDER BY wp_posts.menu_order ASC  made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/x/woocommerce.php'), x_get_view, X_View_Router::render, include('/themes/cvbs/framework/views/integrity/woocommerce.php'), get_header, locate_template, load_template, require_once('/themes/x/header.php'), x_get_view, X_View_Router::render, include('/themes/x/framework/legacy/cranium/headers/views/header/base.php'), x_get_view, X_View_Router::render, include('/themes/cvbs/framework/legacy/cranium/headers/views/integrity/wp-header.php'), x_get_view, X_View_Router::render, include('/themes/x/framework/legacy/cranium/headers/views/global/_navbar.php'), x_get_view, X_View_Router::render, include('/themes/x/framework/legacy/cranium/headers/views/global/_nav-primary.php'), ubermenu, wp_nav_menu, wp_get_nav_menu_items, get_posts, WP_Query->query, WP_Query->get_posts
它还使我的主导航和小部件菜单消失

任何帮助都将不胜感激

编辑7月24日:


我仍然在这方面努力,我发现了一些类似的问题。这些帖子的解决方案是使用
$query->is\u main\u query()
,但我已经在代码中使用了该检查。我注意到这些问题与我的唯一不同之处在于,它们是用于设置
meta_键
,而我正在尝试设置
s
s
是否只能在搜索页面上修改?有什么方法可以在归档页面上模拟它的功能吗?

解决了这个问题,将我的解决方案发布在这里,以防它对任何人都有帮助。因为我试图修改Woocommerce产品的查询,所以我能够使用不同的钩子,而不是
pre_get_posts

do_action( 'woocommerce_product_query', $query, $this );
剩下的代码基本相同,只是使用了新的
$query
变量而不是
global$wp\u query
<代码>$query->is\u main\u query()也不再需要