如何在wp\u查询中搜索标题、内容或元?

ffx8fchx  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(273)

我正在尝试添加在我们的wordpress+woocommerce网站的前端搜索产品sku的功能,但我不知所措(也不完全是一个网站开发人员)。我试过很多插件(付费和免费)都没有用,现在我自己也在做这个。
我有密码:

function woo_custom_search( $query ) { 
    if( ! is_admin() && $query->is_main_query() ) { 
        if ( $query->is_search() ) { 
            $meta_query[] = array(
                    'relation'=> 'OR',
                    array(
                        'key'=> '_sku',
                        'value' => sanitize_text_field( $query->query['s'] ),
                        'compare'=> 'LIKE'
                        )
                    );
            $query->set( 'meta_query', $meta_query ); 
        }
    }
}
add_action( 'woocommerce_product_query' , 'woo_custom_search' );

但是,当我检查使用查询监视器运行的查询时,我看到wordpress是这样构建sql的:

SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (6) ) )
AND (((wp_posts.post_title LIKE '%83976910%')
OR (wp_posts.post_excerpt LIKE '%83976910%')
OR (wp_posts.post_content LIKE '%83976910%')))
AND ( ( ( wp_postmeta.meta_key = '_sku'
AND wp_postmeta.meta_value LIKE '%83976910%' ) ) )
AND wp_posts.post_type = 'product'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'wc-quote'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_title LIKE '%83976910%' DESC, wp_posts.post_date DESC
LIMIT 0, 60;

由于行的原因,此sql查询不返回任何产品 AND ( ( ( wp_postmeta.meta_key = '_sku' . 如果我使用该sql并在有问题的行中用or替换and,那么在mysql中手动查询时,它会像预期的那样工作。
那么,如何重写这里的默认值和关系呢?我想能够搜索的标题或内容或meta\ u键。默认设置似乎是搜索(标题或内容)和meta\ u键。

ugmeyewa

ugmeyewa1#

不幸的是,我找不到这个问题的正确答案,但我确实找到了一个解决方法,可以达到预期的效果:将产品的sku添加到简短的描述中,可以提供预期的功能。您也可以将它添加到它的名称或它的长描述中,并获得相同的结果。
为此,我使用内置的导出器将所有产品导出到csv,在excel中打开它,将sku列附加到short description列,然后将csv导入到网站中,更新现有产品。
(很抱歉,这不是问题的答案,但希望它能帮助任何乘坐类似船只的人)

相关问题