WordPress поставляется со встроенной функциональностью галереи. Добавление галереи к сообщению или странице включает в себя несколько простых шагов:
- Нажмите кнопку Добавить медиа
- Нажмите на ссылку Создать галерею
- Выберите ваши изображения, нажав на них
- Введите хотя бы текст заголовка и альтернативного текста в соответствующее текстовое поле и нажмите кнопку « Создать новую галерею».
Что не предлагает WordPress из коробки — это возможность увеличивать каждое изображение галереи с классным эффектом лайтбокса.
Фактически, вы можете настроить параметры галереи таким образом, чтобы изображения ссылались на выделенную страницу (т.е. страницу вложения), на сам файл изображения или вообще ни на что.
В этом посте я собираюсь показать, как интегрировать популярный плагин jQuery Colorbox от Jack Moore в родную галерею 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 вашей темы).
Откройте 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 . Это утверждение делает следующее:
- возвращает
width
экрана; - он сравнивает эту
width
со значениемmaxWidth
из настроек плагина, которое в нашем случае составляет660px
; - если
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 или вам понравилось самим кодировать функциональность?
Дайте мне знать, что вы думаете!