如何使用meta\\u查询对数值进行“like”比较?
我有一些代码可以在Woocommerce中自动完成产品sku的搜索。它适用于非数字SKU,但我无法让它适用于数字SKU。我使用compare=>“like”,因为我的自动完成脚本设置为在输入2个字符后开始搜索(这样可以搜索10个字符长的SKU,而不是准确输入)。以下是我现在的工作内容:
$products1 = array(
\'post_type\' => array (\'product\', \'product_variation\'),
\'post_status\' => \'publish\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'_sku\',
\'value\' => $_REQUEST[\'term\'],
\'compare\' => \'LIKE\'
)
),
\'fields\' => \'ids\'
);
SO网友:s_ha_dum
没有理由认为元查询不起作用。数据库列为varchar
因此,您的数字将被视为字符串。我在没有你的数据库的情况下尽我所能进行了测试,测试似乎证实了这一点。
我想你会得到很多虚假的比赛。默认值LIKE
搜索将放置%
字符串两端的通配符,以便123
将匹配字符串中的任何位置,例如,此处--12345678
-- 但也在这里--45678123
. 我怀疑你只想要一面LIKE
因此123
匹配但在前面12345123
但不是结局。你需要一个过滤器。
function one_sided_like($sql) {
remove_filter(\'get_meta_sql\',\'wildcard_meta_like\');
$pat = \'%([^%]*)%\';
preg_match(\'|\'.$pat.\'|\',$sql[\'where\'],$matches);
if (!empty($matches[1])) {
$sql[\'where\'] = str_replace($matches[0],$matches[1].\'%\',$sql[\'where\']);
}
return $sql;
}
add_filter(\'get_meta_sql\',\'one_sided_like\');