2017-09-14 70 views
0

有很多與我的相關主題,但我還沒有找到解決方案。我試圖通過ACF字段(單選按鈕)查詢帖子,似乎meta_query被完全忽略。它將返回所有帖子,而不是僅匹配條件的帖子。我曾嘗試使用字段鍵而不是字段名稱,其他比較等。似乎沒有任何工作。希望你有一個可能出錯的想法!這裏是我的代碼:由ACF字段查詢不起作用

<?php 

    $post_args = array(
     'post_type'  => 'products', 
     'posts_per_page' => - 1, 
     'status'   => 'publish', 
     'meta_query'  => array(
      'relation' => 'AND', 
      array(
       'meta_key' => 'product_taste', 
       'meta_value' => array('cold'), 
       'compare' => 'IN', 
      ), 
      array(
       'meta_key' => 'product_served', 
       'meta_value' => array('grated'), 
       'compare' => 'IN' 
      ) 

     ), 
    ); 
    $query  = new WP_Query($post_args); 

    if ($query->have_posts()) { 
     while ($query->have_posts()) : ?> 
      <?php 
      $query->the_post(); 
      ?> 

      <h5> 
       <?php the_title(); ?> 
      </h5> 

     <?php endwhile ?> 
     <?php wp_reset_postdata(); 
    } 
    ?> 
+0

如果僅使用meta_query數組中的一個,如果僅包含product_taste元數據查詢,它是否工作? – FluffyKitten

+0

它只適用於我不使用meta_query數組,但只是聲明meta_key,meta_value和比較。所以它只能在meta_query之外工作。但我需要「AND」關係 –

+0

有問題使用數組和「IN」查詢ACF數據。有幾種方法,取決於你需要做什麼。你只需要爲每個meta_key搜索一個值(例如,'cold'代表'product_taste')? – FluffyKitten

回答

1
  1. 使用 'meta_query' 陣列

在 '關鍵' 和 '價值' 你不需要在meta_query使用meta_keymeta_value .. 。你只能直接在$ args數組中使用它們。如果您要添加meta_query數組,您只需使用keyvalue,例如

$post_args = array(
    [...] 
    'meta_query'  => array(
     array(
      'key'  => 'product_taste', 
      'value' => 'cold', 
      'compare' => 'LIKE', 
     ), 
    [...] 


2. 查詢序列化數據與值

此外,還可以使用'compare' => 'IN'與值的數組,當你試圖查詢ACF數據問題,因爲ACF的數組數據可以在數據庫中序列化(例如,如果數據在中繼器中)。

由於您只能搜索單個值,因此可以使用LIKE而不是IN

把這些結合在一起

$post_args = array(
    'post_type'  => 'products', 
    'posts_per_page' => - 1, 
    'status'   => 'publish', 
    'meta_query'  => array(
     'relation' => 'AND', 
     array(
      'key' => 'product_taste', 
      'value' => 'cold', 
      'compare' => 'LIKE', 
     ), 
     array(
      'key' => 'product_served', 
      'value' => 'grated', 
      'compare' => 'LIKE' 
     ) 
    ), 
); 
$query  = new WP_Query($post_args); 


如果數據序列化,你有可能返回多個匹配值(例如將匹配像「冷」,「冷」,「最冷的話「),然後嘗試在值的末尾添加分號(;),例如

[...] 
     array(
      'key' => 'product_taste', 
      'value' => 'cold;', // add ; to the end of the value 
      'compare' => 'LIKE', 
     ), 
     array(
      'key' => 'product_served', 
      'value' => 'grated;', // add ; to the end of the value 
      'compare' => 'LIKE' 
     ) 
    [...] 

這將在數據庫中序列化值時發揮作用,因爲每個項目都將用分號分隔。

+0

沒有影響:這就像meta_query完全被忽略了 –

+0

@ValeriaMelinte Ooooh堅持!我想我剛剛意識到這個問題!給我一秒確認,然後我肯定地說...... – FluffyKitten

+0

@ValeriaMelinte我剛剛更新了我的答案... – FluffyKitten