Set posts_per_page in WP_Query for custom taxonomy

I’m using the below code to get all the pages under the custom taxonomy terms, and it shows all the pages. What i want is to limit this and gets only say the last two pages published under the custom taxonomy.

The posts_per_page=1 is not working here and show all pages.

<?php
$post_type="page";

// Get all the taxonomies for this post type
$taxonomies = get_object_taxonomies( (object) array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) : 

// Gets every "category" (term) in this taxonomy to get the respective posts
$terms = get_terms( $taxonomy );

echo '<div id="activities_categories">';
foreach( $terms as $term ) :

$customposts = new WP_Query( "taxonomy=$taxonomy&term=$term->slug&posts_per_page=1" );
$customposts->set('posts_per_page', 1);
if( $customposts->have_posts() ):
    while( $customposts->have_posts() ) : $customposts->the_post();
        echo '<li>';
        echo '<a href="' . get_permalink() . '">' . get_the_title(); 
        echo '</a></li>';
    endwhile;

endif;

endforeach;

echo '</div>';
endforeach;
 ?>

Thanks

Edit

The right code to solve the problem

<?php
        $post_type="page";

        // Get all the taxonomies for this post type
        $taxonomies = get_object_taxonomies($post_type); // names (default)

        foreach( $taxonomies as $taxonomy ) : 

            // Gets every "category" (term) in this taxonomy to get the respective posts
             $terms = get_terms( $taxonomy ); 

            echo '<ul>';
            foreach( $terms as $term ) :

            $args = array(
            'showposts' => 1,
            'tax_query' => array(
                array(
                    'taxonomy' => $taxonomy,
                'terms' => $term->slug,
                'field' => 'slug'
                )
            )
            );

            $customposts = new WP_Query( $args );

            if( $customposts->have_posts() ):
                while( $customposts->have_posts() ) : $customposts->the_post();
                    echo '<li>';
                    echo '<a href="' . get_permalink() . '">' . get_the_title(); 
                    echo '</a></li>';
                endwhile;

            endif;

            endforeach;

            echo '</ul>';
        endforeach;
    ?>

2 Answers
2

Your WP_Query is formed incorrectly. See WP_Query Taxonomy Parameters.

Try this code:

<?php
$post_type="page";
// Get all the taxonomies for this post type
$taxonomies = get_object_taxonomies($post_type); // names (default)
foreach( $taxonomies as $taxonomy ) : 
    // Gets every "category" (term) in this taxonomy to get the respective posts
    $terms = get_terms( $taxonomy ); 
    echo '<div id="activities_categories">';
    foreach( $terms as $term ) :
        $customposts = new WP_Query(
           array(
              'posts_per_page' => 1,
              'tax_query' => array(
                   array(
                       'taxonomy' => $taxonomy,
                       'terms' => $term->slug,
                       'field' => 'slug'
                   )
              )
           )
        );
        if( $customposts->have_posts() ):
            while( $customposts->have_posts() ) : $customposts->the_post();
                echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
            endwhile;
        endif;
    endforeach;
    echo '</div>';
endforeach;

Leave a Comment