Querying two taxonomies with tax_query not woking
I have a two custom taxonomies:
- Type
- Product
Type
can be the following:
- Blog
- Case study
- Webinar
Subject
can be:
- Indoor
- Outdoor
I have two drop down menus in WordPress backend where a user can select what type
and subject
they want to show from resources
(my custom post type).
Say, for example, the following posts exist in resources
:
- Post 1: Tagged with
type
blog andsubject
outdoor. - Post 2: Tagged with
type
blog andsubject
indoor. - Post 3: Tagged with
subject
indoor.
The user can either filter by type
or subject
. By this I mean not both are required, only one can be selected. But, if the user does choose both a type
and subject
, I want it to display posts with both tags.
Current approach:
$args = array(
'post_type' => 'resources',
'post_status' => 'publish',
'posts_per_page' => 8,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
),
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
)
);
$resource_type
: Is the variable holding the dropdown value for
type
.$resource_subject
: Is the variable holding the dropdown
value forsubject
.
Current results:
-
When filtering by
subject
alone – it works. -
When filtering by
type
alone – it works. -
When filtering with both – it doesn’t work. I.e. I’ve filtered by
type
blog andsubject
indoor and it is showing mesubject
outdoor posts.
Alternatively, the following works when querying both, but does not work when only choosing one:
$args = array(
'post_type' => 'resources',
'post_status' => 'publish',
'posts_per_page' => $card_count,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
)
);
Leave an answer