I have a custom taxonomy term page set up to display posts associated with that term (taxonomy-insight_type-academia.php). I figured I could use the following to limit the posts on that page based on code found here:


add_action( 'pre_get_posts', function( $query) {
    if ( $query->is_tax( 'academia', 'insight_type' ) ) {
        $query->set( 'posts_per_page', 1 );
} );

I have added the term to the taxonomy but it doesn't seem to work. I can get it to work for the taxonomy, but not the term.

Is there a way to do this?


1 Answer 1


The taxonomy template you have (taxonomy-insight_type-academia.php) is in the form of (taxonomy-{taxonomy}-{term}.php), and the format for is_tax() is is_tax( '<taxonomy>', '<term>' ), so in your pre_get_posts callback, you should:

// Use this.
if ( $query->is_tax( 'insight_type', 'academia' ) )

// Not this.
if ( $query->is_tax( 'academia', 'insight_type' ) )

Additionally — to avoid conflict with other queries, you should also check if the current query is the main one or not, and also check if it's an admin-side request.

if ( ! is_admin() && $query->is_main_query()
    && $query->is_tax( 'insight_type', 'academia' )

You may already know that, but I thought it'd be a good reminder. :)

  • So simple, thanks Sally
    – Phill
    Commented Jul 25, 2020 at 3:03
  • Glad it helped and hopefully the extra stuff is useful. :)
    – Sally CJ
    Commented Jul 25, 2020 at 3:16

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.