Переборка\блокировка параметров сортировки при нулевом значении
Друзья, возникла такая задача, что существует список параметров и при выборе одного или нескольких, выводятся отсортированные записи\посты, в моем случае это товары в соответствии с выбранными параметрами. И все хорошо работает, сортируется и прочее, но возникла задача сделать блокировку параметров при тех или иных результатах сортировки.
Поясняю.
Есть массив с разными параметрами meta_query и tax_query, далее все эти параметры в new WP_Query и выводятся товары. И есть к примеру несколько полей по которым происходит сортировка. Нужно сделать, что бы при выборе определенного поля или даже нескольких, происходила блокировка других параметров для выбора, в случае если при их выборе мы бы получили нулевое значение сортировки.
Как пример.
Есть у нас кирпичи, красные и оранжевые, красные весят 3 кг., а оранжевые 4 кг. И в фильтре мы можем выбрать цвет и вес. Если мы выберем цвет красный, то соответственно должно заблокироваться значение 4 кг. в фильтре по весу, ведь красных кирпичей с весом 4 кг. у нас нет.
В моем случае параметров фильтра очень большое количество. Все что мне пришло в голову, что бы проверить каждый параметр фильтра на нулевое значение при уже выбранных других данных по фильтру, я попытался проверять каждый параметр перебором через jQuery\Ajax. Т.е. я брал уже существующие выбранные параметры фильтра и пробегал по списку остальных (не выбранных) через jQuery each и подключал к массиву сортировки WP_Query каждый новый не выбранный параметр по одиночке. В случае, если значение результатов сортировки равнялось нулю, я блокировал текущий параметр для выбора.
На данный момент ситуация такова, что WordPress очень медленно перебирает каждый параметр и если пользователь тыкнет на одно значение, другие остаются доступными или блокируются чуть ли не посекундно в течении некоторого времени, что в данном случае не подходит для решения задачи.
Если у кого есть какие-то мысли по этому поводу, буду рад выслушать.
Заранее, спасибо.
Посмотрите, как это работает в инет-магазине.
http://rozetka.com.ua/mobile-phones/c80003/filter/preset=middle_smartphones/
Вы все правильно пишите, без аякс не обойтись.
В примере выше - с перезагрузкой страницы, вам же нужно это делать через аякс (без перезагрузки), как и раньше делали.
Только два момента:
Потом перебираете эти все товары - и обозначаете себе, какие свойства доступны. Если есть хотя бы один товар с параметром в 4 кг, значит это свойство оставляем.
Можно конечно во время показа прелоадера делать и вашим способом, проходиться по всем чекбоксам - НО мне кажется, что так будет дольше и нагрузка на БД возрастает, ведь вы делаете более тяжелые запросы.
Спасибо за верную наводку в этом вопросе. Действительно, проще было получить все товары отсортированные и уже забрать с них все доступные параметры для фильтров, остальные же заблокировать.