Я интегрировал Bootstrap Image Gallery (http://blueimp.github.io/Bootstrap-Image-Gallery/) на моем сайте частично успешно, однако, если у меня есть несколько галерей на странице / посте, когда на изображениях нажимают и лайтбокс открывает карусель, циклически проходит по всем изображениям каждой галереи. То, что я хотел бы, чтобы лайтбокс просто циклически проходил по изображениям определенной галереи, на которую нажимали.
Я могу добиться того, чего хочу, жестко кодируя HTML для каждой галереи и устанавливая соответствующие идентификаторы и т. Д., Но я хочу использовать виджет галереи WordPress, чтобы добавить галереи и чтобы световой блок просто работал.
Я использую базовую тему корневого фреймворка на WordPress и поиграл с файлом gallery.php, но безрезультатно. в gallery.php
файл есть roots_gallery
Функция и часть этой функции создают идентификатор класса div на основе идентификатора записи для галереи, а затем также уникальный идентификатор номера, специфичный для этой галереи. Строка кода из gallery.php
файл как ниже:
$unique = (get_query_var('page')) ? $instance . '-p' . get_query_var('page'): $instance;
$output = '<div class="gallery gallery-' . $id . '-' . $unique . '">';
В то же самое gallery.php
файл есть roots_attachment_link_class
функция, которая использует str_replace
Функция для изменения тега каждого изображения галереи для добавления класса миниатюр, как показано ниже:
function roots_attachment_link_class($html) {
$postid = get_the_ID();
$html = str_replace('<a', '<a class="thumbnail img-thumbnail"', $html);
return $html;
}
add_filter('wp_get_attachment_link', 'roots_attachment_link_class', 10, 1);
Чтобы достичь того, чего я хочу, мне просто нужно добавить data-gallery
приписать выше str_replace
функция, которая соответствует одному и тому же идентификатору галереи, например:
$html = str_replace('<a', '<a class="thumbnail img-thumbnail" data-gallery=".blueimp-gallery-, $html);
Я могу получить первую часть идентификатора галереи без проблем, используя:
$id = get_the_ID();
Но я не могу получить $unique
Идентификационная часть, которая создается в roots_gallery
функция. Я попробовал это:
$id = get_the_ID();
static $instance = 0;
$instance++;
$unique = (get_query_var('page')) ? $instance . '-p' . get_query_var('page'): $instance;
$html = str_replace('<a', '<a class="thumbnail img-thumbnail" data-gallery=".blueimp-gallery-' .$id . '-' . $unique . '"', $html);
return $html;
$instance
часть используется в roots_gallery
функция, но здесь он дает уникальный идентификатор для каждого изображения, означая, что лайтбокс показывает только это одно изображение.
Я не опытный php-кодер, так что это может быть основным, но я почесал голову некоторое время, поэтому любая помощь очень ценится. Я могу предоставить полный gallery.php
файл при необходимости.
Спасибо
Ознакомьтесь с руководством по PHP на переменная область. Возможно, вам удастся сэкономить $instance
в новую глобальную переменную, которую вы можете ссылаться внутри roots_attachment_link_class()
в якорной разметке.
Думаю, я его взломал, спасибо cfx за то, что указал мне правильное направление. Довольно просто, но в моем ограниченном опыте программирования я старался избегать глобальных переменных, но это то, что мне было нужно здесь.
Я сделал $unique
переменная глобальная в roots_gallery
функция, а затем ссылался на него в roots_attachment_link_class()
функция.
В roots_gallery
:
global $unique;
$unique = (get_query_var('page')) ? $instance . '-p' . get_query_var('page'): $instance;
В roots_attachment_link_class()
:
global $unique;
$html = str_replace('<a', '<a class="thumbnail img-thumbnail" data-gallery=".blueimp-gallery-' .$id . '-' . $unique . '"', $html);
return $html;
Кажется, все равно работает так, как я хочу.
ура