Explaining the object.
You don’t have to manually force data into those class properties. The whole $wp_query
object has a bunch of internal methods that you should use to set values. Here’s an example:
public function query( $query )
{
if (
'SOME_POST_TYPE' !== $query->get( 'post_type' )
OR ! $query->is_main_query()
OR ! $query->is_archive()
OR ! $query->is_post_type_archive()
OR ! is_page_template( 'TEMPLATE_NAME.php' )
)
return $query;
$query->set( 'posts_per_page', -1 );
$query->set( 'numberposts', -1 );
return $query;
}
Built in taxonomies: Categories & Tags
A Single term/category/taxon
If you want to query for categories and set them manually, then you have a pretty easy task, as you don’t have to to a tax_query
:
$query->set( 'category__in', 13 );
Multiple terms/categories/taxons
If you need to query for multiple categories:
$query->set( 'category__and', array( 12, 13 ) );
You can read more about this on the Codex page for the WP_Query
class. And of course you have the same possibilities for the built in post_tag
/Tags taxonomy.
Custom taxonomies
Here things slightly get more complicated: You’ll need to use a tax_query
. Keep in mind that this needs an array( array() )
. In plain words: One surrounding array and inside this one another one. If you don’t do this, WP will fail silently. Example:
$tax_query = array(
array(
'taxonomy' => 'event_type_taxonomy'
,'field' => 'id'
,'terms' => array( 12, 13 )
,'operator' =>'IN'
)
);
$query->set( 'tax_query', $tax_query );
Extended explanation again on the Codex page.