public
Created

  • Download Gist
gistfile1.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
function filter_term_archive( $query ) {
if( is_tax( some_custom_post_type_tax_slug() ) ) {
$query->set( 'tax_query', array(
'relation' => 'AND', // Change to OR if we only want to filter one type.
array(
'taxonomy' => some_custom_tax_slug(),
'field' => 'slug',
'terms' => $array_of_terms
),
array(
'taxonomy' => some_custom_post_type_tax_slug(),
'field' => 'slug',
'terms' => $current_archive_term
)
));
}
return $query;
}
add_filter( 'pre_get_posts', 'my_get_posts' );
 
// Or this
 
function filter_term_archive( $query ) {
if( is_tax( some_custom_post_type_tax_slug() ) ) {
$query->set( 'tax_query', array(
array(
'taxonomy' => some_custom_tax_slug(),
'field' => 'slug',
'terms' => $array_of_terms
)
));
}
return $query;
}
add_filter( 'pre_get_posts', 'filter_term_archive' );

You should be running is_tax() off of the query object you're passing in, not the global $wp_query object, which the helper function is_tax() is aliased to.

function filter_term_archive( $query ) {
    if ( $query->is_tax('your_taxonomy') ) {
        // do your stuff
    }
}
add_action( 'pre_get_posts', 'filter_term_archive' );

Also, pre_get_posts is an action, not a filter. It amounts to the same thing in this case, but WP's not looking for a return value.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.