我有自定义帖子类型'订阅者'。订阅者有一个名为“电子邮件”的元字段。电子邮件中包含订阅者电子邮件。我需要知道订阅者ID才知道电子邮件字段的值。所以我尝试使用这个wp_query:
$args = array (
'post_type' => 'subscribers',
'meta_query' => array(
array(
'key' => 'email',
'value' => $subscriber_email,
'compare' => '=',
'type' => 'CHAR',
),
),
);
$subscribers = new WP_Query($args);
if ( $subscribers->have_posts() ) {
while ( $subscribers->have_posts() ) {
echo 'Found post!';
}
}
else {
echo 'no posts found';
}
但是只给我“找不到帖子”。另外,我对meta_key和meta_value有点困惑。在Codex示例中,他们在wp_query中使用meta_key和meta_value。但是当我查看我的mysql数据库postmeta表时,我发现meta_key字段的值为'_subscriber',meta_value字段的值为a:1:{s:5:"email";s:16:"admin2@yandex.ru";}
我做错了什么?
更新:在Nathan的建议后,我重写了代码并完成了工作:
$args = array (
'post_type' => 'subscribers',
'meta_query' => array(
array(
'key' => '_subscriber',
'value' => $subscriber_email,
'compare' => 'LIKE'
)
)
);
虽然我决定重构我的代码并将所有自定义元字段转换为字符串,而不是序列化数组。因为我希望将来能够使用wp_query功能。
答案 0 :(得分:2)
你问题的最后一部分很有趣,这也是你遇到问题的原因。
您的元键是'_subscriber'。因此,您需要在查询中将'email'替换为'_subscriber'。
您遇到的问题是您的元价值。你所看到的是一个序列化数组。您需要更改此数据的保存方式,以便该值为常规字符串。