2017-04-01 172 views
0

我試圖查詢ACF字段「show_on_frontpage」值等於「是」(請參閱​​下面屏幕截圖中此字段的定義)的帖子。作爲ACF docs規定,這裏是我的代碼:高級自定義字段:無法通過自定義字段查詢帖子

$args = array(
    'posts_per_page' => -1, 
    'meta_key' => 'show_on_frontpage', 
    'meta_value' => 'yes' 
); 
$my_posts = new WP_Query($args); 
if ($my_posts->have_posts()) { 
    while ($my_posts->have_posts()) : $my_posts->the_post(); 
    if (get_field('show_on_frontpage')) the_field('show_on_frontpage'); ?> 
    endwhile; 
} 

這將返回/無顯示。如果我簡單地使用$args = array('posts_per_page' => -1);,那麼我會得到我所有的帖子,並且對於那些具有「yes」作爲其「show_on_frontpage」字段的值的用戶,會顯示「yes」。

我的代碼有什麼問題?

enter image description here

+1

您的報價代碼塊2號線缺少一個逗號 - 這只是一個轉錄錯誤? – DavidCara

+0

更正,謝謝。這不是問題雖然;) – drake035

回答

1

根據這個問題上的ACF論壇/回答:

https://support.advancedcustomfields.com/forums/topic/using-checkbox-fields-in-custom-queries/

這將是最好的複選框字段切換到真/假領域,而不是,因爲它似乎是你的複選框組領域唯一包含一個選項。

複選框以序列化數據的形式存儲,您將無法使用WP_Query通過複選框字段進行過濾。

如果您使用true/false字段,那麼您可以使用WP_Query, true/false字段的值爲0(零)爲false,1爲true。

所以,如果你打開你的複選框字段到真/假現場,你可以按如下方式重寫代碼:

$args = array(
    'posts_per_page' => -1, 
    'meta_key' => 'show_on_frontpage', 
    'meta_value' => 1 /* or true */ 
); 
$my_posts = new WP_Query($args); 
if ($my_posts->have_posts()) { 
    while ($my_posts->have_posts()) : $my_posts->the_post(); 
     /* My content for each post with the checkbox checked goes here */ 
    endwhile; 
} 
+0

謝謝@Joe和很好的發現。它現在工作!只有一件事:在更改字段類型後,該字段設置爲「true」的帖子未被查詢拾取。我必須將它們設置爲「false」,更新,然後再次將它們設置爲「true」,以便可以選擇它們。任何想法爲什麼?看起來像改變一個領域的類型有點混亂 – drake035

+0

我不確定是否有一個程序化的方式來解決這個問題。應用內容的某些字段類型在字段類型更改爲其他字段時做得不好。有時候內容會翻譯過來,其他時候你會遇到這樣的情況。希望你沒有太多頁面來更新這個方法。 – Joe

0

如果使用較新的meta_query => array()語法這應該工作:

$args = array(
     'posts_per_page' => -1, 
     'meta_query' => array(
      array(
       'key' => 'show_on_frontpage', 
       'value' => 'yes', 
       'compare' => 'LIKE', 
      ) 
     ), 
    ); 

    $my_posts = new WP_Query($args); 

    if ($my_posts->have_posts()) { 

     while ($my_posts->have_posts()) : $my_posts->the_post(); 

      echo get_the_title(); 
      // Post stuff 

     endwhile; 

     /* Restore original Post Data */ 
     wp_reset_postdata(); 

} 

請注意,您需要給文章ID ACF的輔助功能get_field() & the_field() while循環中。

https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

在更廣泛的注意,這條質疑使用post_meta鍵用於此目的的智慧,是值得一讀:https://tomjn.com/2016/12/05/post-meta-abuse/。該文章建議使用自定義分類來實現你所需要的 - 更好的性能。

+0

我試圖使用的代碼的全部重點是,我不選擇所有帖子,只是爲了測試哪些符合標準(浪費資源)。您的$ args會返回所有帖子。 – drake035

+0

你錯了,它只返回'show_on_frontpage'元鍵被設置爲'yes'的帖子。我可以解開你的困惑,所以我將修改答案以刪除ACF條件檢查。 – DavidCara

+0

對不起!原始代碼有一個錯誤(我遺漏了嵌套數組,並使用了錯誤的比較運算符)。我已經編輯了答案,現在應該可以工作。 – DavidCara

相關問題