我在添加meta_value
在WooCommerce SKU的搜索查询中。默认情况下,按SKU搜索仅对管理员有效。
我想进行前端搜索,接受搜索中的SKU。
注意:SKU不在产品标题中。因此,我需要创建一个自定义查询。
function SearchFilter($query) {
if ($query->is_search) {
$meta_query_args = array(
\'relation\' => \'OR\',
array(
\'key\' => \'_sku\',
\'value\' => $query->query_vars[\'s\'],
\'compare\' => \'=\',
)
);
$query->set(\'post_type\', array(\'post\',\'page\', \'product\'));
$query->set(\'post_status\', array(\'publish\'));
$query->set(\'meta_query\', $meta_query_args);
}
return $query;
}
add_filter(\'pre_get_posts\',\'SearchFilter\');
The problem : 当我放置此代码并打印当前SQL请求时,它会给我类似的结果。 SELECT SQL_CALC_FOUND_ROWS bhd_posts.ID FROM bhd_posts INNER JOIN bhd_postmeta ON ( bhd_posts.ID = bhd_postmeta.post_id ) WHERE 1=1 AND (((bhd_posts.post_title LIKE \'%96242-20VH%\') OR (bhd_posts.post_excerpt LIKE \'%96242-20VH%\') OR (bhd_posts.post_content LIKE \'%96242-20VH%\'))) AND (bhd_posts.post_password = \'\') AND (
( bhd_postmeta.meta_key = \'_sku\' AND bhd_postmeta.meta_value = \'96242-20VH\' )
) AND bhd_posts.post_type IN (\'post\', \'page\', \'product\') AND ((bhd_posts.post_status = \'publish\')) GROUP BY bhd_posts.ID ORDER BY bhd_posts.post_title LIKE \'%96242-20VH%\' DESC, bhd_posts.post_date DESC LIMIT 0, 10
正如您所看到的,它试图获取;经典部分“;在表格中x_posts
对于post_title
或post_excerpt
或post_content
AND 它必须有一个meta_value
我的SKU。如上所述,我的产品标题中没有sku。
Goal : 必须在标题、摘录、内容或meta\\u值中搜索,或使用meta\\u值进行独家搜索。