Каждый раз, когда вы звоните $query->set( 'key', 'value' );
, предыдущее значение перезаписывается.
Если я угадаю правильно, параметры ?make=nike&model=shox
только "работают", потому что shox
- последний параметр, и есть только shox
модели с make=nike
.
Вы можете сделать что-то вроде этого:
$metaQuery = [];
if ( isset( $_GET['make'] ) ) {
$metaQuery[] = [
'key' => 'make',
'value' => $_GET['make'],
'compare' => '=',
];
}
if ( isset( $_GET['model'] ) ) {
$metaQuery[] = [
'key' => 'model',
'value' => $_GET['model'],
'compare' => '=',
];
}
if ( isset( $_GET['colour'] ) ) {
$metaQuery[] = [
'key' => 'colour',
'value' => $_GET['colour'],
'compare' => '=',
];
}
if ( isset( $_GET['body_type'] ) ) {
$metaQuery[] = [
'key' => 'body_type',
'value' => $_GET['body_type'],
'compare' => '=',
];
}
$query->set( 'meta_query', $metaQuery );
Вы можете сделать это еще чище, используя петлю foreach()
на суперглобальном $_GET
.
$metaQuery = [];
foreach ( $_GET as $metaKey => $metaValue ) {
$metaQuery[] = [
'key' => $metaKey,
'value' => $metaValue,
'compare' => '=',
];
}
if ( count( $metaQuery ) > 0 ) {
$query->set( 'meta_query', $metaQuery );
}