Lightbox Bootstrap Image Gallery отображает все изображения из нескольких галерей. Хотите отображать только определенные изображения галереи

Я интегрировал 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 файл при необходимости.

Спасибо

2

Решение

Ознакомьтесь с руководством по PHP на переменная область. Возможно, вам удастся сэкономить $instance в новую глобальную переменную, которую вы можете ссылаться внутри roots_attachment_link_class() в якорной разметке.

0

Другие решения

Думаю, я его взломал, спасибо 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;

Кажется, все равно работает так, как я хочу.

ура

0

По вопросам рекламы [email protected]