0

I'd like to get a list of all the custom posts that belong to a specific taxonomy.

I've tried many things including this code, but I get a list of all the posts in the 'members' cpt, and not just posts associated to the 'producers' taxonomy. How can I get it work ?

<?php
$args = array(
        'post_type' => 'members',
         'posts_per_page' => -1,
         'tax_query' => array(
        'taxonomy' => 'producers'
),
);
    $the_query = new WP_Query($args);
    while ( $the_query->have_posts() ) : $the_query->the_post();
        ?>
            <li class="producers" id="post-<?php the_ID(); ?>">
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
            <?php
    endwhile;
 ?>

EDIT 2018-10-31

I finally made it through native WP functions and a custom query. I also needed the pagination functionality so I built it this way.

    $termArray = [];
    $theTerms = get_terms('producers');
    foreach ($theTerms as $singleTerm) {
        $theSlug = $singleTerm->slug;
        array_push($termArray,$theSlug);
    }
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $loop = new WP_Query( array( 'post_type' => 'members', 'orderby' => 'rand', 'posts_per_page' => 5, 'paged' => $paged, 'tax_query' => array(
        array(
            'taxonomy' => 'producers',
            'terms'    => $termArray,
        )
    )));
    if ( $loop->have_posts() ) :
        while ( $loop->have_posts() ) : $loop->the_post();
        $terms = get_the_terms( $post->ID, 'producers');
        if ($terms) {
            /// Here is the code for posts display
        }
    endwhile;
    endif;
    wp_reset_postdata();


// Pagination
    $big = 99999;
    echo paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $loop->max_num_pages
    ));

2 Answers 2

0

The correct way to use the tax_query parameter is to have an array containing an array, like this:

'tax_query' => array(
    array (
        'taxonomy' => 'producers'
    )
),

See the Codex entry for more information.

1
  • This code returns an empty result. I just need to list the posts under producers taxonomy, nevermind the terms. But if the terms parameter is missing, there's no result.
    – Pierre
    Commented Oct 30, 2018 at 16:56
0

Try this

<?php
$custom_args = array('post_type' => 'members',
                     'posts_per_page' => -1,
                     'orderby' => 'id',
                     'order' => 'ASC',
                     'tax_query' => array(array('taxonomy' => 'producers',
                                                'field' => 'slug',
                                                'terms' => 'your term name')));
$custom_query = get_posts($custom_args);
?>
<?php
    foreach ($custom_query as $value) 
     { ?>
       <li class="producers" id="post-<?php $value->ID ; ?>">
           <a href="<?php $value->guid ; ?>"><?php $value->post_title; ?></a>
       </li>
        <?php
     } ?>
1
  • This code returns the list of posts related to a specific term within a taxonomy. I only want to get a list of all the posts of the producers taxonomy, nevermind the terms. If field and terms parameters are missing, there's no result.
    – Pierre
    Commented Oct 30, 2018 at 16:54

Your Answer

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

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