In short:
We are going to overwrite the default template and change the function that is being called to generate our tag and the image inside it.
Next, we are going to create this function into our functions.php and add the attribute we want to the tag.
- copy/paste the template
woocommerce/templates/single-product/product-image.php
to your directory:your-child-theme/woocommerce/single-product/product-image.php
so you can overwrite it’s functionality - change
$html = wc_get_gallery_image_html( $post_thumbnail_id, true );
to
$html = my_custom_img_function( $post_thumbnail_id, true );
- copy paste the following to your
functions.php
/**
* overwritten from https://woocommerce.wp-a2z.org/oik_api/wc_get_gallery_image_html/
*/
function my_custom_img_function($attachment_id, $main_image = false)
{
$flexslider = (bool) apply_filters('woocommerce_single_product_flexslider_enabled', get_theme_support('wc-product-gallery-slider'));
$gallery_thumbnail = wc_get_image_size('gallery_thumbnail');
$thumbnail_size = apply_filters('woocommerce_gallery_thumbnail_size', array($gallery_thumbnail['width'], $gallery_thumbnail['height']));
$image_size = apply_filters('woocommerce_gallery_image_size', $flexslider || $main_image ? 'woocommerce_single' : $thumbnail_size);
$full_size = apply_filters('woocommerce_gallery_full_size', apply_filters('woocommerce_product_thumbnails_large_size', 'full'));
$thumbnail_src = wp_get_attachment_image_src($attachment_id, $thumbnail_size);
$full_src = wp_get_attachment_image_src($attachment_id, $full_size);
$alt_text = trim(wp_strip_all_tags(get_post_meta($attachment_id, '_wp_attachment_image_alt', true)));
$image = wp_get_attachment_image(
$attachment_id,
$image_size,
false,
apply_filters(
'woocommerce_gallery_image_html_attachment_image_params',
array(
'title' => _wp_specialchars(get_post_field('post_title', $attachment_id), ENT_QUOTES, 'UTF-8', true),
'data-caption' => _wp_specialchars(get_post_field('post_excerpt', $attachment_id), ENT_QUOTES, 'UTF-8', true),
'data-src' => esc_url($full_src[0]),
'data-large_image' => esc_url($full_src[0]),
'data-large_image_width' => esc_attr($full_src[1]),
'data-large_image_height' => esc_attr($full_src[2]),
'class' => esc_attr($main_image ? 'wp-post-image' : ''),
),
$attachment_id,
$image_size,
$main_image
)
);
return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" data-thumb-alt="' . esc_attr( $alt_text ) . '" class="woocommerce-product-gallery__image"><a data-lightbox="Gallery" href="' . esc_url($full_src[0]) . '">' . $image . '</a></div>';
}
As you can see the only thing we added to the default function is the attribute you wanted on the last line @ return statement.