Hello.
I’ve been running into some troubles while implementing Lightbox on a site (Berlin theme), because of the problem pointed out by @jflatnes in
After some attempts, I might have found a clean solution; here it is, for those who might need it.
- First, I declare a custom function:
function addLightbox($item_image_gallery, $filter = array())
{
if ($item_image_gallery == '' || empty($filter)) return $item_image_gallery;
// extracts all hrefs and edit them if needed
$pattern = '~(<a(.*?)(href=[\'"]([^\'"]+)[\'"])(.*?)>)~';
return preg_replace_callback(
$pattern,
function ($matches) use ($filter) {
// searches for extension in href's url
$url_chunks = explode('.', $matches[3]);
if (count($url_chunks) > 0) {
// retrieves file extension, trimming it up
$file_extension = substr(strtolower($url_chunks[count($url_chunks) -1]), 0, -1);
// checks whether file extension is in filter array
if (in_array($file_extension, $filter)) {
return '<a ' . $matches[3] . ' data-lightbox="lightbox">';
} else {
return $matches[1];
}
} else {
return $matches[1];
}
},
$item_image_gallery
);
- Then, I pass
item_image_gallery
as first parameter to addLightbox custom function, the second parameter being the array of extensions accepted:
echo addLightbox(item_image_gallery(), array('jpeg', 'jpg', 'gif', 'png'));
Please note: the function does not check whether there’s any other content in the anchor tag, but it works if needed only for applying Lightbox feature.
Hope this helps.