Как реализовать на WP обновление определенной части страницы?
Здравствуйте.
Как реализовать на WP обновление определенной части страницы, отвечающей за вывод отфильтрованного контента?
Фильтр по типу Яндекс.маркета.
Игорь Воротнёв: К примеру, у нас есть фильтр сортировки товара с полями: цвет, размер, цена и тип. Если мы выберем цвет - красный, размер - маленький, цена - 3000, то фильтр нам выдаст один вид товара, если же мы поменяем красный цвет на синий, то фильтр выдаст уже совсем другой товар, но при этом товар красного цвета он должен убрать из вывода. Как этого добиться?
Александр: Я понимаю, как работают фильтры, нет необходимости объяснять очевидные вещи :) Вопрос был в другом. У вас интернет магазин и надо товары фильтровать по характеристикам? Характеристики эти каким образом реализованы - это product attributes? Или у вас свои произвольные таксономии / произвольные поля? От всех этих технических нюансов сильно зависит конкретная реализация. А если в общем и целом, без этих данных, то ответ такой же общий - ajax. Аякс позволяет с помощью javascript отправлять запросы на сервер и получать ответ. Собираете с помощью javascript значения выбранных фильтров, и отправляете с помощью ajax запрос на сервер. Запрос идет на ваш собственный обработчик, который висит на хуке. Обработчик принимает значения фильтров, переданные ему из javascript, делает выборку товаров по ним и возвращает данные для отображения. Javascript-обработчик, отправивший этот ajax-запрос, примет ответ от сервера и заменит контент в нужной области страницы. Вот так это работает. Если вы разработчик - данного описания должно хватить, чтобы понять процесс. Ссылка, приведенная Евгений Кылин поможет реализовать это. Если вы не разработчик - ищите готовый плагин, их в сети достаточно. Например, https://facetwp.com/
Игорь Воротнёв: Прошу меня извинить, ибо я, видимо, задал крайне не верно вопрос. Меня изначально интересовал этот момент - " Javascript-обработчик, отправивший этот ajax-запрос, примет ответ от сервера и заменит контент в нужной области страницы. "
Как в wp заменить/обновить полученный контент? На данный момент у меня полученный контент по критериям фильтра добавляется к уже имеющемуся, а вот как старый контент заменить на полученный - не знаю.
Александр: ааа) так это другое дело. В javascript прилетает html-разметка необходимых результатов (записей/товаров), или только json с данными? Если уже html, то вам нужно просто заменить контент DOM-элемента, если json - то нужно в javascript из темплейта сгенерить нужный html, и только тогда заменить его.
Что касается самой замены - допустим, html у вас находится в javascript-переменной response.data, а контейнер, в который его надо вставить (с заменой текущего контента) имеет id="content". Тогда код jQuery будет таким:
$( '#content' ).html( response.data );
Если у вас новый контент добавляется к старому, значит вы скорее всего используете append() вместо html()
Евгений Кылин К примеру, у нас есть фильтр сортировки товара с полями: цвет, размер, цена и тип. Если мы выберем цвет - красный, размер - маленький, цена - 3000, то фильтр нам выдаст один вид товара, если же мы поменяем красный цвет на синий, то фильтр выдаст уже совсем другой товар, но при этом товар красного цвета он должен убрать из вывода. Как этого добиться?
Александр: ну во-первых нужна форма с выбором параметров. Во-вторых нужен обработчик js события на отправку формы. В-третьих нужен обработчик ajax запроса. И в-четвёртых просто получаемый результат вставлять в нужное место.
Ваши вопросы слишком обстрактные, здесь никто не будет писать километры кода, тем более не зная принципа текущей работы сайта.
Евгений Кылин: Прошу меня извинить, ибо я, видимо, задал крайне не верно вопрос. Выше Игорь поэтапно расписал процесс фильтрации и вот меня как раз таки изначально интересовал этот момент - " Javascript-обработчик, отправивший этот ajax-запрос, примет ответ от сервера и заменит контент в нужной области страницы. " Как в wp заменить/обновить полученный контент?
На данный момент у меня полученный контент по критериям фильтра добавляется к уже имеющемуся, а вот как старый контент заменить на полученный - не знаю.