ACF字段的查询帖子不起作用

时间:2017-09-14 12:11:33

标签: wordpress advanced-custom-fields

有很多与我相关的主题,但我仍然没有找到解决方案。我试图通过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();
    }
    ?>

1 个答案:

答案 0 :(得分:4)

  1. 在'meta_query'数组中使用'key'和'value'
  2. 您不需要在meta_query中使用meta_keymeta_value ...您只能直接在$ args数组中使用它们。如果要添加meta_query数组,只需使用keyvalue,例如

    $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'
            )
        [...]
    

    当数值在数据库中序列化时,这将起作用,因为每个项目将以分号分隔。