
Создание слайдера с миниатюрами в Bricks Builder
В этой статье мы рассмотрим, как создать слайдер с миниатюрами в Bricks Builder, используя стандартные слайдеры, WP_Query для получения изображений и JavaScript для синхронизации двух слайдеров.
Шаг 1: Подготовка данных для слайдера
Добавьте виджет slider (nestable) в структуру вашего проекта. После чего для слайда настройте query loop.

Для начала нам нужно получить изображения из метаполя записи. Мы будем использовать WP_Query для получения изображений и их отображения в слайдере.
В динамическом поле изображения укажите post_id:

В Query Loop выбираем метод получения данных с помощью PHP и добавляем запрос:

В запросе вместо gallery в 1 строке укажите название метаполя вашей галереи:
$gallery = get_post_meta(get_the_ID(), 'gallery', true); // Преобразуем строку в массив, если это не массив if (!is_array($gallery)) { $gallery = explode(',', $gallery); } // Преобразуем элементы массива в целые числа $gallery = array_map('intval', $gallery); // Формируем WP_Query аргументы return [ 'post_type' => 'attachment', 'posts_per_page' => 5, 'post__in' => empty($gallery) ? [0] : $gallery, // Предотвращаем загрузку изображений 'post_status' => 'any' ];
Этот код получает идентификаторы изображений из метаполя gallery и формирует WP_Query, чтобы загрузить изображения.
Шаг 2. Создание слайдера миниатюр
После того как вы настроили основной слайдер, нужно создать слайдер для миниатюр. Важный момент, запросы в основном слайдере и миниатюрах должны совпадать:

Шаг 3. Синхронизация слайдеров
После того, как ваша структура была создана и настроена, пришло время синхронизировать ваши слайдеры, чтобы они работали как единый компонент.
Для слайдера миниатюр нужно добавить аттрибут data-sync в значении которого нужно указать ID основного слайдера:

Таким образом мы свяжем наши слайдера. Остался последний шаг, это добавить JS код, который реализует данную задачу. Данный скрипт адаптивный и может обрабатывать не один слайдер на странице, а сразу несколько.
window.addEventListener('load', function () { function initSliders() { const sliders = document.querySelectorAll('[data-sync]'); sliders.forEach(thumbnailsElement => { const mainSliderId = thumbnailsElement.getAttribute('data-sync'); const mainSliderElement = document.getElementById(mainSliderId); const main = new Splide(mainSliderElement); const thumbnails = new Splide(thumbnailsElement); // Синхронизация слайдеров main.sync(thumbnails); // Монтируем слайдеры main.mount(); thumbnails.mount(); // Добавляем событие клика для миниатюр const thumbnailSlides = thumbnailsElement.querySelectorAll('.splide__slide'); thumbnailSlides.forEach((slide, index) => { slide.addEventListener('click', () => { main.go(index); // Переход на соответствующий слайд в основном слайдере // Обновление активных классов thumbnailSlides.forEach(s => s.classList.remove('is-active')); // Удаляем активный класс у всех slide.classList.add('is-active'); // Добавляем активный класс текущему }); }); // Смена активного класса при перемещении слайдов main.on('move', (newIndex) => { thumbnailSlides.forEach(s => s.classList.remove('is-active')); // Удаляем активный класс у всех thumbnailSlides[newIndex].classList.add('is-active'); // Добавляем активный класс новому слайду }); }); } initSliders(); });
На этом всё. Стилизацию мы уже разберём в видео уроке.
Комментарии пользователей (0)