On Lightbox and issues with no-image files

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.

  1. 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
	);
  1. 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.

This topic was automatically closed 250 days after the last reply. New replies are no longer allowed.