我有一个包含数组值的自定义post元
代码:
update_post_meta($post_id,'custom_meta_key',array('val1','val2','val3','val4'));
现在我想将一个回调挂钩回 pre_get_posts 来修改查询
代码:
add_action('pre_get_posts','foo');
function foo ($q){
if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {
$q->set('meta_query',array(
array(
'key' => 'custom_meta_key',
'value' => array('val1','val3'),
'compare' => 'IN'
)
));
}
remove_action( 'pre_get_posts','foo');
}
我希望仅使用' val1' 或' custom_meta_key' 帖子元获取帖子>' VAL3'
但结果为空白,页面根本不会返回任何项目。
这一定是因为update_post_meta在保存时序列化了数组? 我想要实现的目标是什么?
答案 0 :(得分:1)
为了实现我的目标,我需要改变我坚持发布元的方式。
我必须使用add_post_meta
,而不是使用update_post_meta这样才能实现
$q->set('meta_query',array(
array(
'key' => 'custom_meta_key',
'value' => array('val1','val3'),
'compare' => 'IN'
)
));
我需要这样做
delete_post_meta($post->id,'custom_meta_key');
add_post_meta($post->id,'custom_meta_key','val1');
add_post_meta($post->id,'custom_meta_key','val2');
我首先执行delete_post_meta以防止post meta的值重复(我已将回调附加到save_post钩子)
然后我为每个值
添加add_post_meta现在custom_meta_key将具有数组值(' val1',' val2'),上述代码将有效。
另外,update_post_meta会对数组进行序列化,但是当用作WP_Query的元查询的参数时,它不会反序列化数组字符串,这就是为什么我的代码上面的代码不能解决的问题。工作
我通过这样做证实了这一点
update_post_meta($post->id,'custom_meta_key',array('val1'))
array(
'key' => 'custom_meta_key',
'value' => serialize(array('val1')),
'compare' => 'IN'
)
并且有效
referrences: