ACF meta_key and meta_value break loop

by hommealone   Last Updated June 19, 2019 23:08 PM

I have a CPT with post type of 'recipe'. I have several ACF Advanced Custom Fields in the CPT.

My loop WORKS correctly when it is written like this:

<?php

// args
$args = array(
    'numberposts'   => -1,
    'order'         => 'ASC',
    'orderby'       => 'name',
    'post_type'     => 'recipe'
);

// query
$recipe_query = new WP_Query( $args );

?>
<?php if( $recipe_query->have_posts() ): ?>

    <?php while( $recipe_query->have_posts() ) : $recipe_query->the_post(); ?>

        <?php get_template_part( 'template-parts/content', 'recipe' ); ?>

    <?php endwhile; ?>

<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post().

?>

The 'recipe' CPT has an ACF field (field type: select) named 'special_diets', with several values like 'vegan', 'vegetarian', 'sugar-free', etc. Multiple selections are allowed in the field. (Most recipes have multiple values selected.)

When I add arguments to the $args array to try to show only posts that have one of the special diet types, the loop returns nothing:

// args
$args = array(
    'numberposts'   => -1,
    'order'         => 'ASC',
    'orderby'       => 'name',
    'post_type'     => 'recipe',
    'meta_key'      => 'special_diets',
    'meta_value'    => 'vegan'
);

I have tried adding a meta_compare as well, using 'IN' and also trying '='

// args
$args = array(
    'numberposts'   => -1,
    'order'         => 'ASC',
    'orderby'       => 'name',
    'post_type'     => 'recipe',
    'meta_key'      => 'special_diets',
    'meta_value'    => 'vegan',
    'meta_compare'  => 'IN'
);

But as soon as I add the 'meta_key' at all, the loop returns nothing (and no error messages). I've double- and triple-checked that the field name 'special_diets' is correct.

What's wrong?

This code:

<pre>
    <?php
        var_dump(get_field('special_diets'));
    ?>
</pre>

returns:

array(7) {
  [0]=>
  string(10) "sugar-free"
  [1]=>
  string(11) "gluten-free"
  [2]=>
  string(8) "egg-free"
  [3]=>
  string(10) "dairy-free"
  [4]=>
  string(10) "vegetarian"
  [5]=>
  string(5) "vegan"
  [6]=>
  string(17) "diabetic-friendly"
}


Answers 1


you need to add a LIKE in your meta_query

$args = array(
    'post_type'=> 'recipe',
    'meta_query' => array(
                     array(
                        'key'     => 'special_diets',
                        'value'   => 'vegan',
                        'compare' => 'LIKE',
                    )
                ),
);
$query = new WP_Query($args);
$fiction = $query->found_posts;

as explained here Count custom post types with a specific meta value

Gregory
Gregory
June 19, 2019 22:40 PM

Related Questions



proplem with pagination in wordpress

Updated March 24, 2017 22:08 PM

Remove duplicated values from a loop

Updated August 30, 2017 15:08 PM