2014-02-20 38 views
1

我有一個自定義帖子類型「訂戶」。訂戶有一個名爲'email'的元字段。電子郵件填充訂閱者電子郵件。我只需要知道電子郵件字段的值就可以獲得訂閱者ID。所以我嘗試使用這個wp_query: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:"[email protected]";}我做錯了什麼?

UPDATE:彌敦道的意見後,我重寫代碼,並做了工作:

$args = array (
     'post_type' => 'subscribers', 
     'meta_query' => array(
      array(
       'key' => '_subscriber', 
       'value' => $subscriber_email, 
       'compare' => 'LIKE' 

      ) 
     ) 
    ); 

雖然我決定修改我的代碼,使所有自定義元字段爲字符串,而不是序列化數組。因爲我想在未來使用wp_query的功能。

+0

我不認爲'key'=>'email', 'value'=> $ subscriber_email,正在做你認爲它正在做的事情...請記住,args正在過濾循環,而不是真的是任何可以通過這種邏輯進行過濾的帖子本身。讓我問你這個問題:如果你完全刪除了元查詢。查詢現在可以工作嗎?如果是這樣,那它沒有做什麼?你想用訂閱者作爲郵件類型來完成什麼?爲什麼不使用WP用戶查詢? – evanv

+0

內森已經給了我正確方向的線索。 – Ksenia

回答

2

問題的最後一部分很有趣,這也是您遇到問題的原因。

您的元鍵是'_subscriber'。因此,您需要在查詢中將'email'替換爲'_subscriber'。

您擁有的問題是您的元值。你看到的是一個序列化數組。您需要更改此數據的保存方式,以便該值爲常規字符串。

+0

哦,我明白了。我想我錯了'創建並保存自定義元框'教程。他們將所有自定義元框數據字段保存到數組中,所以我做到了。感謝你的正確方向,內森! – Ksenia

相關問題