2017-09-14 76 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