我正在尝试使用一组值运行 meta_query,并让它搜索是否所有都存在于存储在序列化数组中的元值中。这可能吗?
我的查询参数如下(注意这是嵌套在一个类中):
$args = array(
'post_type' => $this->posttype,
'posts_per_page' => '9',
'paged' => $paged,
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_key' => 'lumens',
'meta_query' => array(
array(
'key' => 'mount',
'value' => array('pendant' , 'wall'),
'compare' => 'IN'
)
)
);
存储的元数据的示例位于类似于以下的序列化数组中:
a:4:{i:0;s:7:"pendant";i:1;s:15:"surface-ceiling";i:2;s:4:"wall";i:3;s:14:"aircraft-cable";}
无论我尝试什么,我的查询都不会返回适当的结果。我现在意识到我可能应该将每个值存储在不同的元键中,而不是存储在数组中,但是,现在已经有很多条目可以更改元数据。
更新:
这是我的解决方法,类似于@Leander 方法;由于数据库中已经存在大量条目,我不想更改序列化输入,而且我忘记提及一件事,我正在使用CMB2 开发人员工具包,它将复选框字段本地存储为序列化数据。
// This is pulled from a user input
$meta_queries = array('pendent' , 'wall');
// Metaqueries are passed through loop to create single entries with the like comparison operator
foreach($meta_queries as $key => $value){
$meta_query = array(
'key' => '_tf_' . $key,
// Serialize the comparison value to be more exact
'value' => serialize(strval($value)),
'compare' => 'LIKE',
);
}
// Generate $args array
$args = array(
'post_type' => $this->posttype,
'posts_per_page' => '9',
'paged' => $paged,
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_key' => 'lumens',
'meta_query' => $meta_queries
);
在填充数据时,我没有注意到太多的性能问题。我想如果要处理大量数据,这种方法将不得不重新设计。