2

I have a custom post called 'account' and custom taxonomy called 'bank';

What I'm trying to do is to show with wp_query post a list of post that should have a specific custom fields named 'tax'.

But I want in the result list of posts, only one post (for example the last) for each categories of my custom taxonomy.

My code is:

$query = new WP_Query ( array( 
    'showposts' => 5, 
    'post_type' => 'account', 
    'meta_key' => 'other_custom_field', 
    'orderby' => 'meta_value_num', 
    'order' => 'desc', 
    'meta_query' => array(array('key' => 'tax','compare' => '=','value' => 0)), ) );

This code works but it shows all post with same custom fields 'tax' contained in each category of custom post.

I want to show only one post for each categories, with this value of custom field.

1
  • Can someone help me?
    – Giulio
    Jan 10, 2018 at 16:42

1 Answer 1

3
<?php
// get all terms of the `bank` taxonomy
$banks = get_terms(
    array(
        'taxonomy' => 'bank',
        // more arguments can be used, see (1) below the code
    )
);

// look through banks, picking one post from each
foreach ( $banks as $bank ) {

    $args = array(
        'post_type'       => 'account', // your custom post type
        'posts_per_page'  => '1', // one post per bank (per term)
        'tax_query'        => array(
            array(
                'taxonomy' => 'bank',
                'terms'    => $bank->term_id,
            ),
        )
        'meta_query' => array( // your custom field stuff
            array(
                'key' => 'tax',
                'compare' => '=',
                'value' => 0,
            ),
        ), 
        // more arguments can be used, see (2) below the code
    );

    // The Loop
    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();

            /*
            Your markup goes here
            */
            the_ID();
            the_title();
        }
    }

} // END foreach bank

Also, here should be the error check, but it's out of the question scope.

For accepted arguments see:

  1. WP_Term_Query.
  2. WP_query
4
  • I tried but it doens't give any results.
    – Giulio
    Feb 15, 2018 at 7:08
  • Ouch, sorry. I was thinking about categories (as it is written in the question). But there are 'taxonomy terms', not 'categories'. See the fixed code.
    – Max Yudin
    Feb 15, 2018 at 16:40
  • Seems that works. I'll let you know ;)
    – Giulio
    Feb 26, 2018 at 7:19
  • How can I do this in a single SQL query? Oct 16, 2020 at 5:47

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.