Bootstrap Image Gallery 灯箱显示来自多个画廊的所有图像。只希望显示特定的画廊图像

Posted

技术标签:

【中文标题】Bootstrap Image Gallery 灯箱显示来自多个画廊的所有图像。只希望显示特定的画廊图像【英文标题】:Bootstrap Image Gallery lightbox displaying all images from multiple galleries. Want only specific gallery images displayed 【发布时间】:2014-11-20 20:16:49 【问题描述】:

我已经部分成功地在我的网站上集成了 Bootstrap 图片库 (http://blueimp.github.io/Bootstrap-Image-Gallery/),但是如果我在一个页面/帖子上有多个画廊,当点击图片并且灯箱打开时,轮播会循环浏览每个画廊的所有图片.我想要的是让灯箱循环浏览被点击的特定画廊的图像。

我可以通过硬编码每个画廊的 html 并设置适当的 ID 等来实现我想要的,但我想使用 Wordpress 画廊小部件来添加画廊并让灯箱正常工作。

我在 Wordpress 上使用了根框架基础主题,并使用了 gallery.php 文件,但无济于事。在gallery.php 文件中有一个roots_gallery 函数,该函数的一部分基于画廊的帖子ID 创建一个div 类ID,然后还有一个特定于该画廊的唯一编号ID。 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);

为了实现我想要的,我只需要在上面的 str_replace 函数中添加一个 data-gallery 属性,它对应于相同的画廊 ID,如下所示:

$html = str_replace('<a', '<a class="thumbnail img-thumbnail" data-gallery=".blueimp-gallery-[gallery ID], $html);

我可以通过以下方式获取画廊 ID 的第一部分:

$id = get_the_ID();

但我无法获得在roots_gallery 函数中创建的$unique ID 部分。我试过这个:

  $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 函数中使用,但在这里它为每张图片提供了一个唯一的 ID,这意味着灯箱只显示那一张图片。

我不是专业的 php 编码器,所以这可能是基本的东西,但我现在已经摸不着头脑了,所以非常感谢任何帮助。如果需要,我可以提供完整的gallery.php 文件。

谢谢

【问题讨论】:

【参考方案1】:

查看variable scope 上的 PHP 手册。您可能会幸运地将$instance 保存到一个新的全局变量中,然后您可以在锚标记中的roots_attachment_link_class() 中引用该变量。

【讨论】:

【参考方案2】:

认为我已经破解了它,感谢 cfx 为我指明了正确的方向。确实相当简单,但在我有限的编码经验中,我倾向于远离全局变量,但这正是我需要的。

我在roots_gallery 函数中将$unique 变量设为全局变量,然后在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;

无论如何,到目前为止似乎都在按我的意愿工作。

干杯

【讨论】:

以上是关于Bootstrap Image Gallery 灯箱显示来自多个画廊的所有图像。只希望显示特定的画廊图像的主要内容,如果未能解决你的问题,请参考以下文章

php 使用ACF Gallery Field的Bootstrap Carousel

如何使用 react-image-gallery 停止所有 react-youtube 视频 onSlide?

如何在android的Gridview中实现Image Gallery?

MagMi media_gallery 不工作

image_gallery_saver ios获取下载路径

如何在 jQuery Image Gallery 中集成 Facebook Like 按钮