我有一系列帖子,并且都有一个值为“owner”的meta_key和带有序列化数据的meta_value,例如“a:3:{i:0;s:3:"325";i:1; s:2:"41";i:2;s:2:"29";}"
meta_key owner
元值a:3:{i:0;s:3:"325";i:1;s:2:"41";i:2;s:2:"29";}
我正在尝试弄清楚如何正确使用 get_posts()
返回所有具有值为 owner
的 meta_key 和包含特定值(例如 41
)的 meta_value 的帖子
$args = array(
'post_type' => 'rp_applications',
'nopaging' => true,
'meta_query' => array(
'relation' => 'AND',
array(
'compare' => '=',
'key' => 'archived',
'value' => '0000-00-00'
),
array(
'compare' => '=',
'key' => 'owner',
'value' => ???? WHAT DO I PUT HERE ????
)
)
);
$applications = get_posts($args);
答案 0 :(得分:0)
这听起来像是您应该将“所有者”存储为分类术语而不是元数据。它还可以为您提供更轻松、更快速的查询能力。
也就是说,绝对可以做您想做的事。不过我会很谨慎,因为默认情况下 postmeta
表未编入索引,因此运行元查询的大表会大大减慢您的网站的速度。如果表甚至会很大,您可能需要考虑向表添加部分索引(或者再次切换到分类术语而不是为此发布元数据)。
如果您仍然想使用元查询,请查看可用的 compare
选项 in the WP_Meta_Query()
docs。
可用选项之一是 REGEXP
,因此您可以执行以下操作:
$args = array(
'post_type' => 'rp_applications',
'nopaging' => true,
'meta_query' => array(
'relation' => 'AND',
array(
'compare' => 'REGEXP',
'key' => 'owner',
'value' => sprintf( 'a:\d:{i:0;s:\d:"\d.*?";i:1;s:%d:"%d".*', strlen($owner_id), $owner_id )
),
array(
'compare' => '=',
'key' => 'archived',
'value' => '0000-00-00'
)
)
);
当然,这种方法只有在序列化数据的格式相同时才有效,否则您需要调整正则表达式 - 但这应该足以让您开始!