@tbalero

Как изменить код функции, чтобы в сравнении с диапазоном цен (который выбрал пользователь) — участвовал бы ни один, а два параметра?

Есть сайт с каталогом товаров.
На сайте есть форма поиска, в которой пользователь может (помимо прочего) указать в качестве параметра поиска:
  • цена от
  • цена до
  • либо диапазон цен от-до


Для фильтра по ценам используется следующий код:

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", как это есть сейчас)
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы