WP_Query不适用于元数据字段

时间:2014-02-20 21:06:27

标签: wordpress

我有自定义帖子类型'订阅者'。订阅者有一个名为“电子邮件”的元字段。电子邮件中包含订阅者电子邮件。我需要知道订阅者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功能。

1 个答案:

答案 0 :(得分:2)

你问题的最后一部分很有趣,这也是你遇到问题的原因。

您的元键是'_subscriber'。因此,您需要在查询中将'email'替换为'_subscriber'。

您遇到的问题是您的元价值。你所看到的是一个序列化数组。您需要更改此数据的保存方式,以便该值为常规字符串。