Статьи

Добавление стильного эффекта лайтбокса в галерею WordPress

WordPress поставляется со встроенной функциональностью галереи. Добавление галереи к сообщению или странице включает в себя несколько простых шагов:

  1. Нажмите кнопку Добавить медиа
  2. добавить медиа кнопку

  3. Нажмите на ссылку Создать галерею
  4. создать галерею ссылку

  5. Выберите ваши изображения, нажав на них
  6. выберите галерею изображений

  7. Введите хотя бы текст заголовка и альтернативного текста в соответствующее текстовое поле и нажмите кнопку « Создать новую галерею».
  8. кнопка создания новой галереи

Что не предлагает WordPress из коробки — это возможность увеличивать каждое изображение галереи с классным эффектом лайтбокса.

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

настройки галереи

В этом посте я собираюсь показать, как интегрировать популярный плагин jQuery Colorbox от Jack Moore в родную галерею WordPress.

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

Готовый продукт будет выглядеть примерно так.

Как выглядит эффект лайтбокса в галерее WordPress в конце этого проекта

Почему бы не использовать плагин WordPress?

В этот момент я слышу, как вы говорите: «Существует множество плагинов WordPress, которые позволяют легко добавлять галереи и лайтбоксы на сайт WordPress. Сам jQuery Colorbox имеет несколько реализаций в качестве плагина WordPress. Зачем мне самому кодировать эту функцию? »

С одной стороны, здесь мы рассматриваем очень специфическую часть функциональности, то есть добавление эффекта лайтбокса только в галерею WordPress. Большинство плагинов могут предложить гораздо больше, и вместе с этим также появляется дополнительный код. Если вам нужна высокая гибкость, например, добавление эффектов лайтбокса к изображениям в постах и ​​страницах, к пользовательским ссылкам или к другим видам контента, настройке параметров плагина из панели администратора и т. Д., Тогда переходите к маршруту плагина WP. , Однако, если ваша цель состоит в том, чтобы выполнить очень целенаправленную задачу, как это происходит сейчас, запуск плагина WP, вероятно, является излишним.

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

Наконец, кодирование — это весело, познавательно (всегда есть что-то новое, чему можно научиться), и в этом случае это не займет много времени.

Что вам нужно

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

Время погрузиться!

Получение jQuery Colorbox в файлы вашей темы

Перво- наперво : загрузите копию jQuery Colorbox и разархивируйте сжатый файл где-нибудь на вашем жестком диске.

Файлы, необходимые для работы jQuery Colorbox, следующие:

  • jquery.colorbox-min.js ;
  • colorbox.css и папку с images из одного из пяти скинов Colorbox. Их можно найти в папках с названием example1 , example2 и т. Д., example5 в example5 . Попробуйте каждый скин в вашем браузере и выберите тот, который вам нравится больше всего. Для этого урока я выбрал скин, содержащийся в папке example3 .

Затем, чтобы сохранить проект хорошо организованным, добавьте папку к файлам вашей темы и назовите ее colorbox . Удалите файлы, перечисленные выше, внутри этой папки.

jQuery Colorbox поставляется с текстовыми строками, уже переведенными на внушительное количество языков. Переводы находятся внутри папки i18n . Вам не нужно копировать эту папку в свой проект, но важно знать об этом. Это отличный ресурс, если вы намереваетесь предоставить переводы для вашей темы.

Интеграция jQuery Colorbox в вашу тему

Интеграция Colorbox в вашу тему включает в себя ряд шагов. Некоторые из этих шагов касаются кода jQuery, необходимого для того, чтобы Colorbox выполнял свою работу. Другая серия шагов решает задачу «осведомления» WordPress о Colorbox и включает в себя написание PHP-кода.

Давай приступим к работе!

Создание основного файла JavaScript

Colorbox — это плагин jQuery, поэтому вам нужно создать файл JavaScript, который будет содержать необходимый код инициализации и конфигурации.

Добавьте новую папку в корень вашей темы и назовите ее js . Затем внутри папки js создайте новый файл и назовите его main.js (или любое другое имя, которое вы предпочитаете для основного файла JavaScript вашей темы).

Файлы тем с папкой js и main.js

Откройте main.js и введите jQuery-оболочку без конфликтов, чтобы убедиться, что знак $ jQuery не конфликтует с другими сценариями, использующими тот же символ псевдонима:

 (function($) { //All your code goes inside this wrapper })(jQuery); 

Теперь ваш документ jQuery настроен. Давайте продолжим!

Написание сценария jQuery

Инициализация jQuery Colorbox так же проста, как написание следующей строки кода:

 selector.colorbox(); 

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

Но с таким настраиваемым плагином вы можете сделать немного больше. Существует множество настроек, которые вы можете настроить, чтобы Colorbox делал то, что вы хотите. Давайте начнем с настройки некоторых из них. Внутри jQuery без конфликтной оболочки напишите следующий фрагмент кода:

 //Settings for lightbox var cbSettings = { rel: 'cboxElement', width: '95%', height: 'auto', maxWidth: '660', maxHeight: 'auto', title: function() { return $(this).find('img').attr('alt'); } } 

Приведенный выше код хранит набор настроек внутри литерала объекта JavaScript с именем cbSettings :

  • rel используется для группировки фотографий. Установка этого атрибута включает навигационные стрелки в лайтбоксе, чтобы пользователи могли переходить от одной фотографии к предыдущей или следующей фотографии в группе. cboxElement — это класс, который Colorbox автоматически добавляет к ссылкам привязки, к которым прикреплена функциональность лайтбокса, но вы можете группировать фотографии под другим именем.
  • ширина и высота соответствуют размерам лайтбокса. Процентное значение ширины помогает компоненту оставаться жидким и отзывчивым. maxWidth и maxHeight относятся к максимальной ширине и максимальной высоте содержимого, загружаемого в лайтбокс, который в данном случае является фотографией галереи.
  • название может быть использовано для отображения подписи к фотографии в лайтбоксе. Здесь установлена ​​короткая функция, которая сообщает Colorbox извлечь значение атрибута alt изображения и использовать его в качестве заголовка изображения.

Вы можете найти список всех доступных настроек на веб-сайте jQuery Colorbox .

После настройки параметров инициализируйте Colorbox:

 //Initialize jQuery Colorbox $('.gallery a[href$=".jpg"], .gallery a[href$=".jpeg"], .gallery a[href$=".png"], .gallery a[href$=".gif"]').colorbox(cbSettings); 

Фрагмент выше выбирает все теги привязки внутри элемента с классом gallery . Кроме того, выбранные теги привязки должны иметь значение href которое заканчивается на .jpg , .jpeg , .png или .gif (наиболее распространенные форматы файлов изображений). Наконец, Colorbox вызывается для этого выделения, передавая объект cbSettings в качестве аргумента.

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

 //Keep lightbox responsive on screen resize $(window).on('resize', function() { $.colorbox.resize({ width: window.innerWidth > parseInt(cbSettings.maxWidth) ? cbSettings.maxWidth : cbSettings.width }); }); 

При изменении размера браузера $.colorbox.resize() метод $.colorbox.resize() . Внутри этого метода приведенный выше код устанавливает значение width для условного оператора тройного оператора JavaScript . Это утверждение делает следующее:

  1. возвращает width экрана;
  2. он сравнивает эту width со значением maxWidth из настроек плагина, которое в нашем случае составляет 660px ;
  3. если width экрана больше 660px , он устанавливает width лайтбокса на значение 660px . Однако, если размер экрана меньше 660px , width лайтбокса изменяется до width указанной в настройках, что в данном случае составляет 95% .

Больше об этом решении доступно на странице Colorbox GitHub .

Вот и все сейчас на фронте JavaScript, вы вернетесь к нему позже, чтобы разобраться с интернационализацией WordPress. Давайте поговорим о WordPress-стороне проекта.

Переход на PHP

В настоящее время WordPress ничего не знает о наличии jQuery Colorbox в вашей теме. Ни файлы плагина, ни main.js не загружаются. Рекомендуемая практика загрузки таблиц стилей и файлов JavaScript в WordPress — использование wp_enqueue_style () и wp_enqueue_script () соответственно.

Найдите functions.php в файлах вашей темы и откройте его в редакторе кода. Вероятно, ваша тема уже имеет функцию для постановки в очередь style.css . Если вы не можете его найти, адаптируйте функцию из фрагмента кода ниже к своей теме.

 function themeslug_enqueue_styles_scripts() { //Colorbox stylesheet wp_enqueue_style( 'colorbox', get_template_directory_uri() . '/colorbox/colorbox.css' ); //Your theme CSS wp_enqueue_style( 'themeslug-style', get_stylesheet_uri() ); //Colorbox jQuery plugin js file wp_enqueue_script( 'colorbox', get_template_directory_uri() . '/colorbox/jquery.colorbox-min.js', array( 'jquery' ), '', true ); //Add main.js file wp_enqueue_script( 'themeslug-script', get_template_directory_uri() . '/js/main.js', array( 'colorbox' ), '', true ); } //Hook the function above add_action( 'wp_enqueue_scripts', 'themeslug_enqueue_styles_scripts' ); 

Давайте объясним, что делает код выше.

  • Он оборачивает все вызовы wp_enqueue_style() и wp_enqueue_script() внутри функции с именем themeslug_enqueue_styles_scripts() .
  • Внутри themeslug_enqueue_styles_scripts() CSS-файл Colorbox ставится в очередь перед таблицей стилей темы.
  • Файл JavaScript Colorbox ставится в очередь, указывая на библиотеку jQuery как на зависимость, то есть jquery.colorbox-min.js загружается только после того, как файл библиотеки jQuery уже загружен.
  • Файл JavaScript темы, main.js , ставится в очередь следующим, указывая jquery.colorbox-min.js как зависимость.
  • Аргумент true в конце wp_enqueue_script() гарантирует, что файлы JavaScript загружаются в область wp_enqueue_script() footer страницы перед закрывающим </body> .
  • Наконец, функция wp_enqueue_scripts() к wp_enqueue_scripts() . Это гарантирует, что таблицы стилей и файлы скриптов загружаются в нужное время.

Если вы используете get_template_directory_uri() тему, убедитесь, что вы заменили все экземпляры get_template_directory_uri() на get_stylesheet_directory_uri() .

Кроме того, не забывайте заменять все экземпляры themeslug на themeslug вашей themeslug темы.

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

Интернационализация текстовых строк JQuery Colorbox

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

… это процесс разработки вашей темы, так что это может быть легко
переведено на другие языки. Интернационализация часто
сокращенно i18n (потому что между i и 18
тогда).

Интернационализация — тема
руководство

WordPress использует библиотеки gettext для этой задачи. Если вы работали с темами или плагинами WordPress, вы, вероятно, сталкивались с некоторыми функциями gettext, такими как __() и _e() .

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

JQuery Colorbox имеет свои собственные текстовые строки. Вы можете найти их, открыв любой из файлов в папке i18n . Нам нужно убедиться, что эти строки каким-то образом отправлены в WordPress, чтобы они могли быть интернационализированы вместе с текстовыми строками вашей темы. Проблема в том, как перенести данные из кода JavaScript в WordPress?

Ответ заключается в отличной функции WordPress, которая называется wp_localize_script() .

wp_localize_script() принимает три обязательных параметра:

  • $handle . Это дескриптор или идентификатор скрипта, в котором расположены текстовые строки. Данные для этого параметра являются первым аргументом в функции wp_enqueue_script() используемой для постановки в очередь файла JavaScript Colorbox. В данном случае это « colorbox »;
  • $object_name . Это объект, созданный wp_localize_script() , которая будет доступна из кода JavaScript в main.js ;
  • $l10n . Этот параметр представляет фактические данные для передачи из кода JavaScript в WordPress в виде массива пар ключ / значение.

Давайте посмотрим wp_localize_script() в действии. Найдите themeslug_enqueue_styles_scripts() вы написали ранее, в functions.php . Чуть ниже строки кода, чтобы поставить в очередь файл JavaScript Colorbox …

 wp_enqueue_script( 'colorbox', get_template_directory_uri() . '/colorbox/jquery.colorbox-min.js', array( 'jquery' ), '', true ); 

… Добавьте следующий код:

 //Make the Colorbox text translation-ready $current = 'current'; $total = 'total'; wp_localize_script( 'colorbox', 'themeslug_script_vars', array( 'current' => sprintf(__( 'image {%1$s} of {%2$s}', 'themeslug'), $current, $total ), 'previous' => __( 'previous', 'themeslug' ), 'next' => __( 'next', 'themeslug' ), 'close' => __( 'close', 'themeslug' ), 'xhrError' => __( 'This content failed to load.', 'themeslug' ), 'imgError' => __( 'This image failed to load.', 'themeslug' ) ) ); 

Обычные строки в приведенном выше коде интернационализируются с использованием функции __('string', 'textdomain') . Тем не менее, current и total не используются в качестве простых текстовых строк. Фактически, Colorbox использует их в качестве заполнителей для тренировки количества текущей фотографии и общего количества фотографий соответственно. Чтобы сохранить эту функциональность, приведенный выше код использует функцию PHP sprintf() с соответствующими заполнителями.

Затем вернитесь к сценарию конфигурации Colorbox в main.js и добавьте этот код в cbSettings JavaScript cbSettings после title :

 current: themeslug_script_vars.current, previous: themeslug_script_vars.previous, next: themeslug_script_vars.next, close: themeslug_script_vars.close, xhrError: themeslug_script_vars.xhrError, imgError: themeslug_script_vars.imgError 

Теперь код настроек конфигурации Colorbox выглядит так:

 //Settings for lightbox var cbSettings = { rel: 'cboxElement', width: '95%', height: 'auto', maxWidth: '660', maxHeight: 'auto', title: function() { return $(this).find('img').attr('alt'); }, current: themeslug_script_vars.current, previous: themeslug_script_vars.previous, next: themeslug_script_vars.next, close: themeslug_script_vars.close, xhrError: themeslug_script_vars.xhrError, imgError: themeslug_script_vars.imgError } 

Отлично, вы только что настроили параметры интернационализации.

Значения в каждой паре ключ / значение используют объект themeslug_script_vars из функции wp_localize_script() вы создали ранее. Именно этот объект делает переменную JavaScript доступной для PHP.

Вывод

Вот и все, задача добавления функциональности лайтбокса в собственную галерею WordPress с помощью jQuery Colorbox выполнена.

Чтобы проверить результат, добавьте галерею в сообщение или страницу и выберите параметр « Файл мультимедиа» в разделе « Ссылка на настройки галереи». Теперь получите доступ к галерее из внешнего интерфейса и нажмите на изображение. Вы должны увидеть всплывающее изображение с эффектом лайтбокса.

Если вас не устраивает внешний вид лайтбокса, вы можете изменить код CSS, который вы найдете в таблице стилей Colorbox, используя файл style.css вашей темы.

Вы бы предпочли использовать плагин WordPress Colorbox или вам понравилось самим кодировать функциональность?

Дайте мне знать, что вы думаете!