Необычность постфильтра WordPress

#wordpress #filter

#wordpress #Фильтр

Вопрос:

Я пытаюсь разработать пользовательский фильтр типа сообщений WordPress, касающийся арендуемых помещений, которые необходимо фильтровать по местоположению, цене и квадратным метрам (площади) или в любой комбинации. Теперь фильтр работает правильно для ценообразования, но не для пространства области, поскольку результаты не отображаются, за одним исключением.

Когда я пытаюсь отфильтровать пробелы между 1-100, ничего не отображается, но, осмелюсь ли я выбрать между 20 и 30, отображается пробел с 29 (только один между указанными значениями). Область сохраняется как целое число, как и цена.

Поля, используемые в фильтре, — это местоположение (выпадающий список), минимальная цена, максимальная цена, минимальная площадь и максимальная площадь (все поля ввода чисел).

Что я контролирую?

 $args = array(
    'orderby' => 'date',
    'post_type' => 'spaces',
    'meta_query' => array(
        array(
            'key' => 'rental_status',
            'value' => 'available',
            'compare' => '='
        ),
    )
);
$args['meta_query'] = array();
if (isset($_POST['location_filter']) amp;amp; $_POST['location_filter'] || isset($_POST['min_area']) amp;amp; $_POST['min_area'] || isset($_POST['max_area']) amp;amp; $_POST['max_area'] || isset($_POST['min_price']) amp;amp; $_POST['min_price']  || isset($_POST['max_price']) amp;amp; $_POST['max_price'])
    $args['meta_query'] = array('relation' => 'AND');
if (isset($_POST['min_area']) amp;amp; $_POST['min_area'] amp;amp; isset($_POST['max_area']) amp;amp; $_POST['max_area']) {
    $args['meta_query'][] = array(
        'key' => 'area',
        'value' => array($_POST['min_area'], $_POST['max_area']),
        'type' => 'numeric',
        'compare' => 'between'
    );
} else {
    if (isset($_POST['min_area']) amp;amp; $_POST['min_area'])
        $args['meta_query'][] = array(
            'key' => 'area',
            'value' => $_POST['min_area'],
            'type' => 'numeric',
            'compare' => '>'
        );
    if (isset($_POST['max_area']) amp;amp; $_POST['max_area'])
        $args['meta_query'][] = array(
            'key' => 'area',
            'value' => $_POST['max_area'],
            'type' => 'numeric',
            'compare' => '<'
        );
}
if (isset($_POST['min_price']) amp;amp; $_POST['min_price'] amp;amp; isset($_POST['max_price']) amp;amp; $_POST['max_price']) {
    $args['meta_query'][] = array(
        'key' => 'total_fee',
        'value' => array($_POST['min_price'], $_POST['max_price']),
        'type' => 'numeric',
        'compare' => 'between'
    );
} else {
    if (isset($_POST['min_price']) amp;amp; $_POST['min_price'])
        $args['meta_query'][] = array(
            'key' => 'total_fee',
            'value' => array($_POST['min_price'], 10000),
            'type' => 'numeric',
            'compare' => 'between'
        );
    if (isset($_POST['max_price']) amp;amp; $_POST['max_price'])
        $args['meta_query'][] = array(
            'key' => 'total_fee',
            'value' => array(1, $_POST['max_price']),
            'type' => 'numeric',
            'compare' => 'between'
        );
}
if (isset($_POST['location_filter']) amp;amp; $_POST['location_filter']) {
    $args['meta_query'][] =  array(
        'key' => 'location',
        'value' => $_POST['location_filter'],
        'compare' => '='
    );
}
  

Комментарии:

1. Я бы предложил вывести (print_r) $args['meta_query'] на экран, чтобы вы могли видеть конечный результат построителя запросов. Возможно, это может помочь. Я подозреваю, что в данных из формы есть что-то неожиданное — мои простые тесты в вашем коде, похоже, работают, поэтому я подвергаю сомнению входные значения и конечный результат на их основе.

2. Спасибо! Я проверил это — конечно. Но, как ни странно, входные данные практически одинаковы, только имеют другое имя.. Я проверил их на уровне базы данных, и даже там они точно такие же.

3. Кроме того, когда я объединяю область с location_filter или ценой, результаты ДЕЙСТВИТЕЛЬНО отображаются. Цена Whereas также не работает ни с какими другими фильтрами.