Listing all custom posts having a specific taxonomy whatever the terms

admin2025-06-06  9

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
    ));

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
    ));
Share Improve this question edited Oct 31, 2018 at 16:27 Pierre asked Oct 29, 2018 at 20:57 PierrePierre 253 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 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.

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
     } ?>
转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1749217103a317343.html

最新回复(0)