Есть сайт с каталогом товаров.
На сайте есть форма поиска, в которой пользователь может (помимо прочего) указать в качестве параметра поиска:
- цена от
- цена до
- либо диапазон цен от-до
Для фильтра по ценам используется следующий код:
function generate_meta_query_price() {
if(!empty($_GET['price_from']) && !empty($_GET['price_to'])) {
return array('key' => 'price-of-product-ot', 'value' => array($_GET['price_from'], $_GET['price_to']), 'type' => 'numeric', 'compare' => 'BETWEEN');
}
if(empty($_GET['price_from']) && !empty($_GET['price_to'])) {
return array('key' => 'price-of-product-ot', 'value' => $_GET['price_to'], 'type' => 'numeric', 'compare' => '<');
}
if(!empty($_GET['price_from']) && empty($_GET['price_to'])) {
return array('key' => 'price-of-product-do', 'value' => $_GET['price_from'], 'type' => 'numeric', 'compare' => '>');
}
return array();
}
*Для каждого товара (при создании страницы товара) заполняется значение для поля "price-of-product-ot" и значение для поля "price-of-product-do".
*Например для товара "А": значение для поля "price-of-product-ot" = 2500 ; значение для поля "price-of-product-do" = 4500
*В коде для фильтра по ценам используется сравнение с этими значениями.
В результате:
- Логика кода работает корректно в случае, когда пользователь в форме поиска выбрал только значение "цена от".
- Логика кода работает корректно в случае, когда пользователь в форме поиска выбрал только значение "цена до".
- Логика кода работает некорректно в случае, когда пользователь в форме поиска выбрал диапазон цен от-до.
То-есть, если пользователь в форме поиска указал диапазон: от 2000 до 3000, то товар "А" будет найден, так как значение для поля "price-of-product-ot" (которое у товара "А" = 2500) корректно попадает в выбранный пользователем диапазон.
А если пользователь в форме поиска указал диапазон: от 4000 до 5000, то товар "А" не будет найден, так как значение для поля "price-of-product-ot" (которое у товара "А" = 2500) не попадает в выбранный пользователем диапазон. При том, что на самом деле товар "А" должен попадать в выбранный диапазон, так значение для поля "price-of-product-do" у товара "А" = 4500. Но в коде функции - в строке для сравнения цены товара с диапазоном цен (который выбрал пользователь) - указан только один параметр: "price-of-product-ot".
Вопрос:
Как изменить код функции, чтобы в сравнении с диапазоном цен (который выбрал пользователь) - участвовали оба параметра: и "price-of-product-ot", и "price-of-product-do" (а не только один параметр "price-of-product-ot", как это есть сейчас)