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;
?>
Your
WP_Query
is formed incorrectly. See WP_Query Taxonomy Parameters.Try this code:
The problem is not where you think it is. Run this (I changed
post_type
to “posts” so that it would work conveniently for me, but it shouldn’t matter):Now, look for ‘customposts_counts’ in your generated page. You have one result every time.
I think the problem is more with the logic of your code, with the logic of your nested loops. You are looping, at least potentially, over the same terms many times. You will have to make an effort to prevent those duplicates. See if this work for you: