0

We have a custom type called books. In a template, we need to show the counts of books that have the book_type as

  1. Fiction
  2. Non Fiction
  3. Novel
  4. Short Stories

We use ACF Pro, and the above field is set up as a checkbox multiple selection. So a book can be Fiction + Short Stories, Fiction + Novel, etc. We need to count only Fiction.

This does not work, as found in another suggested thread here:

$query = new WP_Query( array( 'meta_key' => 'book_type', 'meta_value' => 'Fiction' ) );
$fiction = $query->found_posts;

I don't have enough points to comment there, so it's better I suppose to create a new ticket.

Also found a thread on the ACF forums, but the code suggested there doesn't work either. I use latest WP, latest ACF Pro (5.8.x).

Welcome any thoughts on how to do this.

5
  • You have to use meta query like: wordpress.stackexchange.com/a/159433/138292 Jun 14, 2019 at 5:30
  • This type of data would be much better suited to a Taxonomy. Then you can easily get the post count as it's stored alongside the taxonomy terms as $term->post_count. Jun 14, 2019 at 6:38
  • @JacobPeattie I suppose its you who downvoted my anwser ? May I ask you why ? It does the requested job, no ?
    – Gregory
    Jun 14, 2019 at 12:09
  • @Gregory You make several points in your answer that are inaccurate: They shouldn't use LIKE, a full meta_query is not necessary, and posts_per_page does not need to be -1 when using found_posts. Jun 14, 2019 at 12:14
  • @JacobPeattie thanks for the reply, but i really don't think it has to be downvoted for those reason. Maybe just add a comment, & i will edit with your suggestions !
    – Gregory
    Jun 14, 2019 at 12:17

1 Answer 1

0

1st. you need to add post_type to your query, then you need to filter meta_value with LIKE. Finaly, you need to add posts_per_page as -1 to get ALL posts.

$args = array(
    'post_type'=> 'books',
    'meta_query' => array(
                     array(
                        'key'     => 'book_type',
                        'value'   => 'Fiction',
                        'compare' => 'LIKE',
                    )
                ),
);
$query = new WP_Query($args);
$fiction = $query->found_posts;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.