meta_query проверяет, установлены ли оба значения

У меня есть фильтр возраста, где он проверяет два настраиваемых поля, min_age и max_age , max_age является обязательным, поэтому он может быть пустым.

Кажется, что они не работают вместе:

  array( 'key' => 'max_age', 'value' => $max_age, 'type' => 'numeric', 'compare' => '<=', ), array( 'key' => 'max_age', 'value' => '', 'compare' => '!=', ) 

Если я удалю верхний массив (<= фильтр), он вернет правильные результаты, только покажет результаты с правильным min_age и результатами, которые имеют значение max_age. Как я могу заставить их работать вместе, потому что != '' max_age фильтр != '' max_age , иначе фильтр max_age <= не работает правильно, потому что он игнорирует этот фильтр, если пользовательское поле max_age пусто.

  $query->set( 'meta_query', array( 'relation' => 'AND', array( 'key' => 'min_age', 'value' => $min_age, 'type' => 'numeric', 'compare' => '>=', ), array( 'key' => 'max_age', 'value' => $max_age, 'type' => 'numeric', 'compare' => '<=', ), array( 'key' => 'max_age', 'value' => '', 'compare' => '!=', ) )); 

Вы можете использовать isset чтобы проверить, установлены ли значения, а затем передать их в качестве аргументов. Разделите свой запрос на 2 части и используйте их по мере необходимости.

 // Check if both are set if ( isset( $max_age ) && isset( $min_age ) ) { $meta_query = array( 'relation' => 'AND', array( 'key' => 'min_age', 'value' => $min_age, 'type' => 'numeric', 'compare' => '>=', ), array( 'key' => 'max_age', 'value' => $max_age, 'type' => 'numeric', 'compare' => '<=', ), array( 'key' => 'max_age', 'value' => '', 'compare' => '!=', ) ); } else { $meta_query = array( array( 'key' => 'min_age', 'value' => $min_age, 'type' => 'numeric', 'compare' => '>=', ) ); } // Now set the query $query->set( 'meta_query', $meta_query ); 

Если оба параметра $min_age и $max_age всегда установлены, и вы хотите проверить, пусты ли они или нет, вы можете использовать empty() вместо isset() .