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