我有 acf 字段“复选框”。有 3 个值:
在帖子中我选择了以下值,但我无法获取这些值的记录。
$posts = get_posts([
'post_type' => 'products', //my custom post type
'meta_query' => [
'relation' => 'AND',
[
'key' => 'colors',// acf field name
'value' => ['green', 'blue'],
'compare' => 'IN',
],
[...],
],
]);
IN 在这种情况下不起作用的原因是 ACF 为复选框字段存储的值是序列化的 PHP 字符串。
作为存储您提到的颜色的示例,您最终会在 meta_value 数据库字段中保存如下所示的值:
a:3:{i:0;s:3:"red";i:1;s:5:"green";i:2;s:4:"blue";}
a:1:{i:0;s:3:"red";}
a:2:{i:0;s:3:"red";i:1;s:5:"green";}
a:1:{i:0;s:4:"blue";}
为了查询这些,您需要将整个字段视为一串数据并执行 LIKE 比较/比较。
为了确保获得正确的值,您可以在字符串周围使用双引号来匹配,即使用“红色”而不是仅将“红色”视为字符串。其中双引号没有任何特殊含义。
“red”和“red”都可以,但后者也会用 LIKE 匹配 reddragon。
您的代码看起来像这样,当然,根据需要继续添加更多和嵌套 meta_query 部分。
$posts = get_posts([
'post_type' => 'products',
'meta_query' => [
'relation' => 'AND',
[
'key' => 'colors',
'value' => '"green"',
'compare' => 'LIKE',
],
[
'key' => 'colors',
'value' => '"blue"',
'compare' => 'LIKE',
],
],
]);