Take a look at your meta_query
param. With and without country
param.
// With country
'meta_query' => array(
0 => array(
'key' => '_al_listing_country',
'value' => array(
0 => 'Pakistan',
1 => 'United Kingdom',
),
'compare' => 'IN',
0 => array(),
1 => array(
'key' => '_al_listing_model_name',
'value' => array(
0 => 'F12 Berlinetta',
1 => 'California',
),
'compare' => 'IN',
),
2 => array(
'key' => '_al_listing_condition',
'value' => array(
0 => 'New',
1 => 'Used',
),
'compare' => 'IN',
),
3 => array(),
4 => array(),
'relation' => 'AND',
),
),
// Without country
'meta_query' => array(
0 => array(
0 => array(),
1 => array(
'key' => '_al_listing_model_name',
'value' => array(
0 => 'F12 Berlinetta',
1 => 'California',
),
'compare' => 'IN',
),
2 => array(
'key' => '_al_listing_condition',
'value' => array(
0 => 'New',
1 => 'Used',
),
'compare' => 'IN',
),
3 => array(),
4 => array(),
'relation' => 'AND',
),
)
Your key
, value
and compare
params are not on the same nesting level just like others meta_query
filters. This is the problem.
Your country meta_query filter is not in array and is merging with other meta queries in different way. You should return array of array in country_query
method.
/**
* Returns a meta query for filtering by country.
* @return type
*/
private function country_query() {
if ( isset( $_GET['country'] ) && ! empty( $_GET['country'] ) ) {
$data = array_map( 'sanitize_text_field', wp_unslash( $_GET['country'] ) );
return array(
array(
'key' => '_al_listing_country',
'value' => $data,
'compare' => 'IN'
)
);
}
return array();
}
or add result from country_query
as array item like other filters do.
$country_query[] = $this->country_query();