有很多与我相关的主题,但我仍然没有找到解决方案。我试图通过ACF字段(单选按钮)查询帖子,似乎完全忽略了meta_query。它返回所有帖子,而不仅仅是那些符合条件的帖子。我已经尝试使用字段键而不是字段名称,其他比较等。似乎没有任何工作。希望你对可能出错的东西有所了解!这是我的代码:
<?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 :(得分:4)
您不需要在meta_query中使用meta_key
和meta_value
...您只能直接在$ args数组中使用它们。如果要添加meta_query数组,只需使用key
和value
,例如
$post_args = array(
[...]
'meta_query' => array(
array(
'key' => 'product_taste',
'value' => 'cold',
'compare' => 'LIKE',
),
[...]
2. 使用值数组查询序列化数据
当您尝试查询ACF数据时,使用'compare' => 'IN'
和值数组也会出现问题,因为ACF数据可以在数据库中序列化(例如,如果数据在转发器中)。 / p>
由于您只搜索单个值,因此可以使用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 );
如果数据已序列化,并且您的值可能会返回多个匹配项(例如LIKE 'cold'
会匹配“冷”,“冷”,“最冷”等字词),然后尝试在值的末尾添加分号(;
),例如
[...]
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'
)
[...]
当数值在数据库中序列化时,这将起作用,因为每个项目将以分号分隔。