问题:ACF 字段的 ID 数组(存储为字符串)不遵守 WPQuery(自定义查询)
post_meta.meta_key = 'EventTopicId'的数据
a:3:{i:0;s:2:"10";i:1;s:2:"32";i:2;s:2:"30";}
我还有其他几个 meta_key 字段,它们组合在一起为 WPQuery 创建过滤器。 (例如 EventTopicId + CategoryId + ...)
Id 作为数组传递。使用“IN”运算符时,查询返回 0 个结果。 这是我发现的最接近我认为我需要的东西。 PHP 中的数组转换为逗号分隔数组。
$metaSearchQuery[] =[
'key' => 'EventTopicId',
'value' => $eventTopicId,
'compare' => 'IN'
];
问题是我的 MetaQuery 是 AND 关系(filter1 + filter2 等)。 假设“IN”会在 ACF 字段上完成工作...但是如果我传递一个 10 的数组 $eventTopicId=['10'];然后返回零结果。
以上返回 0 个结果。 EndDates 和 SessionDetails 数据对于我正在测试的帖子来说是可以的。 看来正确的 SQL 是
( mt1.meta_key = 'EventTopicId' AND ( mt1.meta_value 如 '"10"' 或 mt1.meta_value 就像 '"11"' ... )
如何使用多个元键、一些字符串、一些数组来制作 WP 搜索查询。
注意:我尝试将其转换为字符串,但效果甚微
array_walk($eventTopicId, function(&$value, $key) {
return $value = '"'.$value.'"';
//return $value = (string) $value;
});
更新:这个原始 SQL 有效。
所以问题仍然存在:如何使用 WPQuery 和 MetaData 制作这样的 SQL。
结果确实是另一个嵌套数组,使用这个答案作为灵感: https://wordpress.stackexchange.com/questions/104060/using-or-conditions-in-meta-query-for-query-posts-argument
'meta_query' =>
array(
'relation' => 'AND', // default relation
array(
'key' => 'met_key_1',
'value' => '1128',
'compare' => 'LIKE',
),
array(
'relation' => 'OR',
array(
'key' => 'meta_key_2',
'value' => 'Friday',
'compare' => 'LIKE',
),
array(
'key' => 'meta_key_2',
'value' => 'Saturday',
'compare' => 'LIKE',
),
)
)
因此,生成的 SQL 确实是元字段之间的 AND 和单个元字段内的特定序列化数据集中的 OR。