Как создать адаптивный слайдер в WordPress с использованием своего плагина

Создание адаптивного слайдера — популярная задача для многих сайтов на WordPress. В этой статье мы подробно разберём, как сделать собственный плагин для слайдера, который будет корректно работать на любых устройствах и подстраиваться под размер экрана.

Почему стоит создавать свой плагин слайдера для WordPress?

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

Кроме того, вы сможете легко модифицировать и расширять функциональность слайдера, добавлять уникальные анимации и стили.

В этом руководстве мы создадим простой, но функциональный адаптивный слайдер без внешних зависимостей.

Структура плагина и подключение скриптов

Начнём с создания базового плагина. В папке wp-content/plugins/wpsystem-slider создайте файл wpsystem-slider.php со следующим содержимым:

<?php
/**
 * Plugin Name: WPSYSTEM Slider
 * Description: Простой адаптивный слайдер для WordPress
 * Version: 1.0
 * Author: WPSYSTEM
 */

// Регистрируем стили и скрипты
function wpsystem_slider_enqueue_scripts() {
    wp_enqueue_style('wpsystem-slider-style', plugin_dir_url(__FILE__) . 'css/wpsystem-slider.css');
    wp_enqueue_script('wpsystem-slider-script', plugin_dir_url(__FILE__) . 'js/wpsystem-slider.js', array('jquery'), null, true);
}
add_action('wp_enqueue_scripts', 'wpsystem_slider_enqueue_scripts');

// Регистрируем шорткод для вывода слайдера
function wpsystem_slider_shortcode($atts, $content = null) {
    $slides = [
        'https://picsum.photos/id/1018/600/300',
        'https://picsum.photos/id/1015/600/300',
        'https://picsum.photos/id/1019/600/300'
    ];
    $output = '<div class="wpsystem-slider">';
    foreach ($slides as $slide) {
        $output .= '<div class="slide"><img src="' . esc_url($slide) . '" alt="Slide image"/></div>';
    }
    $output .= '</div>';
    return $output;
}
add_shortcode('wpsystem_slider', 'wpsystem_slider_shortcode');
?>

Создайте папки css и js внутри папки плагина и добавьте туда соответствующие файлы wpsystem-slider.css и wpsystem-slider.js.

CSS для адаптивного слайдера

В файле css/wpsystem-slider.css опишем базовые стили и адаптивность:

.wpsystem-slider {
  position: relative;
  overflow: hidden;
  max-width: 100%;
  margin: 20px auto;
}
.wpsystem-slider .slide {
  display: none;
  width: 100%;
}
.wpsystem-slider .slide img {
  width: 100%;
  height: auto;
  display: block;
}
.wpsystem-slider .slide.active {
  display: block;
}

/* Кнопки навигации */
.wpsystem-slider .nav-button {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0,0,0,0.5);
  color: #fff;
  border: none;
  padding: 10px;
  cursor: pointer;
  z-index: 10;
}
.wpsystem-slider .nav-button.prev {
  left: 10px;
}
.wpsystem-slider .nav-button.next {
  right: 10px;
}

@media (max-width: 600px) {
  .wpsystem-slider .nav-button {
    padding: 6px;
  }
}

JavaScript для переключения слайдов

В файле js/wpsystem-slider.js реализуем переключение слайдов по кнопкам и автопрокрутку:

jQuery(document).ready(function($) {
  var currentIndex = 0;
  var slides = $('.wpsystem-slider .slide');
  var slideCount = slides.length;
  
  function wpsystem_slider_showSlide(index) {
    slides.removeClass('active');
    slides.eq(index).addClass('active');
  }
  
  function wpsystem_slider_nextSlide() {
    currentIndex = (currentIndex + 1) % slideCount;
    wpsystem_slider_showSlide(currentIndex);
  }
  
  function wpsystem_slider_prevSlide() {
    currentIndex = (currentIndex - 1 + slideCount) % slideCount;
    wpsystem_slider_showSlide(currentIndex);
  }
  
  // Добавляем кнопки навигации
  var prevBtn = $('<button class="nav-button prev">❮</button>');
  var nextBtn = $('<button class="nav-button next">❯</button>');
  $('.wpsystem-slider').append(prevBtn, nextBtn);
  
  prevBtn.on('click', function() {
    wpsystem_slider_prevSlide();
  });
  nextBtn.on('click', function() {
    wpsystem_slider_nextSlide();
  });
  
  // Показываем первый слайд
  wpsystem_slider_showSlide(currentIndex);
  
  // Автопрокрутка слайдов каждые 5 секунд
  setInterval(wpsystem_slider_nextSlide, 5000);
});

Как использовать готовый слайдер на сайте

Чтобы вывести слайдер, просто добавьте шорткод [wpsystem_slider] в редактор поста или страницы. Плагин автоматически подключит стили и скрипты, и слайдер заработает.

Вы можете расширить функционал, добавляя параметры к шорткоду, например, управлять временем автопрокрутки или менять изображения.

Пример расширения шорткода с параметрами

Изменим функцию шорткода для передачи массива URL изображений и интервала:

function wpsystem_slider_shortcode($atts) {
    $atts = shortcode_atts(array(
        'images' => '', // Список URL через запятую
        'interval' => 5000 // Интервал автопрокрутки в мс
    ), $atts);
    
    $images = explode(',', $atts['images']);
    if (empty($images[0])) {
        // Если изображения не заданы, используем дефолтные
        $images = [
            'https://picsum.photos/id/1018/600/300',
            'https://picsum.photos/id/1015/600/300',
            'https://picsum.photos/id/1019/600/300'
        ];
    }
    $output = '<div class="wpsystem-slider" data-interval="'.intval($atts['interval']).'">';
    foreach ($images as $slide) {
        $output .= '<div class="slide"><img src="' . esc_url(trim($slide)) . '" alt="Slide image"/></div>';
    }
    $output .= '</div>';
    return $output;
}

И обновим JS, чтобы брать интервал из атрибута:

jQuery(document).ready(function($) {
  var slider = $('.wpsystem-slider');
  if (!slider.length) return;
  
  var currentIndex = 0;
  var slides = slider.find('.slide');
  var slideCount = slides.length;
  var intervalTime = parseInt(slider.data('interval')) || 5000;

  function wpsystem_slider_showSlide(index) {
    slides.removeClass('active');
    slides.eq(index).addClass('active');
  }

  function wpsystem_slider_nextSlide() {
    currentIndex = (currentIndex + 1) % slideCount;
    wpsystem_slider_showSlide(currentIndex);
  }

  function wpsystem_slider_prevSlide() {
    currentIndex = (currentIndex - 1 + slideCount) % slideCount;
    wpsystem_slider_showSlide(currentIndex);
  }

  // Добавляем кнопки навигации
  var prevBtn = $('<button class="nav-button prev">❮</button>');
  var nextBtn = $('<button class="nav-button next">❯</button>');
  slider.append(prevBtn, nextBtn);

  prevBtn.on('click', function() {
    wpsystem_slider_prevSlide();
  });
  nextBtn.on('click', function() {
    wpsystem_slider_nextSlide();
  });

  wpsystem_slider_showSlide(currentIndex);

  setInterval(wpsystem_slider_nextSlide, intervalTime);
});

Советы по оптимизации и безопасности

Для улучшения производительности рекомендуем оптимизировать изображения перед загрузкой на сервер. Используйте современные форматы, например WebP, и подключайте ленивую загрузку (lazy loading).

Также не забывайте про безопасность: всегда экранируйте выходные данные с помощью функций WordPress, таких как esc_url() и esc_attr(), чтобы избежать XSS-уязвимостей.

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

Добавление lazy loading

Для включения ленивой загрузки в тегах <img> добавьте атрибут loading="lazy":

$output .= '<div class="slide"><img loading="lazy" src="' . esc_url(trim($slide)) . '" alt="Slide image"/></div>';

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

Как создать автоматический мультиязычный сайт на WordPress
02.04.2026
Как создать автоматический импорт продуктов в WooCommerce
16.02.2026
Как отключить Emoji в WordPress для ускорения сайта
28.11.2025
Как создать динамический фильтр по мета-полям в WordPress с примером кода
28.01.2026
WooCommerce: как программно удалять товар из корзины по условию
24.05.2026