WordPress как на ладони
wordpress jino

Переборка\блокировка параметров сортировки при нулевом значении

Друзья, возникла такая задача, что существует список параметров и при выборе одного или нескольких, выводятся отсортированные записи\посты, в моем случае это товары в соответствии с выбранными параметрами. И все хорошо работает, сортируется и прочее, но возникла задача сделать блокировку параметров при тех или иных результатах сортировки.

Поясняю.

Есть массив с разными параметрами meta_query и tax_query, далее все эти параметры в new WP_Query и выводятся товары. И есть к примеру несколько полей по которым происходит сортировка. Нужно сделать, что бы при выборе определенного поля или даже нескольких, происходила блокировка других параметров для выбора, в случае если при их выборе мы бы получили нулевое значение сортировки.

Как пример.

Есть у нас кирпичи, красные и оранжевые, красные весят 3 кг., а оранжевые 4 кг. И в фильтре мы можем выбрать цвет и вес. Если мы выберем цвет красный, то соответственно должно заблокироваться значение 4 кг. в фильтре по весу, ведь красных кирпичей с весом 4 кг. у нас нет.

В моем случае параметров фильтра очень большое количество. Все что мне пришло в голову, что бы проверить каждый параметр фильтра на нулевое значение при уже выбранных других данных по фильтру, я попытался проверять каждый параметр перебором через jQuery\Ajax. Т.е. я брал уже существующие выбранные параметры фильтра и пробегал по списку остальных (не выбранных) через jQuery each и подключал к массиву сортировки WP_Query каждый новый не выбранный параметр по одиночке. В случае, если значение результатов сортировки равнялось нулю, я блокировал текущий параметр для выбора.

На данный момент ситуация такова, что WordPress очень медленно перебирает каждый параметр и если пользователь тыкнет на одно значение, другие остаются доступными или блокируются чуть ли не посекундно в течении некоторого времени, что в данном случае не подходит для решения задачи.

Если у кого есть какие-то мысли по этому поводу, буду рад выслушать.

Заранее, спасибо.

1
kecapb2 год назад
  • 1
    stepan1187 cайт: www.weblancer.net/users/stepanko/?affili...

    Посмотрите, как это работает в инет-магазине.

    http://rozetka.com.ua/mobile-phones/c80003/filter/preset=middle_smartphones/

    Вы все правильно пишите, без аякс не обойтись.

    В примере выше - с перезагрузкой страницы, вам же нужно это делать через аякс (без перезагрузки), как и раньше делали.
    Только два момента:

    • при выборе одного из вариантов - нужно блокировать возможность выбора других чекбоксов и показывать прелоадер (картинку-крутилку)
    • делаете аякс запрос на выборку всех товаров, которые соответст. чекбоксам из фильтра.

    Потом перебираете эти все товары - и обозначаете себе, какие свойства доступны. Если есть хотя бы один товар с параметром в 4 кг, значит это свойство оставляем.

    Можно конечно во время показа прелоадера делать и вашим способом, проходиться по всем чекбоксам - НО мне кажется, что так будет дольше и нагрузка на БД возрастает, ведь вы делаете более тяжелые запросы.

    kecapb год назад

    Спасибо за верную наводку в этом вопросе. Действительно, проще было получить все товары отсортированные и уже забрать с них все доступные параметры для фильтров, остальные же заблокировать.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.