#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 также не работает ни с какими другими фильтрами.