Đoạn code trên sẽ giúp bạn thêm video vào gallery của Woocommerce, khi nhấp vào sẽ hiện lên lightbox video:
Bước 1: Các bạn dùng Advanced Custom Field để tạo 1 trường Video cho sản phẩm. Trường tên là product_video_url .
Bước 2: Sửa file Trong thư mục child theme/woocommerce/single-product/product-gallery-thumbnails.php .
Sửa lại như sau:
<?php global $post, $product, $woocommerce; // Lấy video URL từ custom field $video_url = get_field('product_video_url', $post->ID); if(!empty( $video_url)){ echo do_shortcode('[lightbox id="lightbox-video" width="800px" padding="20px"][ux_video url="'.esc_url($video_url).'"] [/lightbox]'); } $attachment_ids = fl_woocommerce_version_check('3.0.0') ? $product->get_gallery_image_ids() : $product->get_gallery_attachment_ids(); $thumb_count = count($attachment_ids)+1; // Disable thumbnails if there is only one extra image. if($thumb_count == 1) return; $rtl = 'false'; $thumb_cell_align = 'left'; if(is_rtl()) { $rtl = 'true'; $thumb_cell_align = 'right'; } if ( $attachment_ids ) { $loop = 0; $columns = apply_filters( 'woocommerce_product_thumbnails_columns', 4 ); $gallery_class = array('product-thumbnails','thumbnails'); if($thumb_count <= 5){ $gallery_class[] = 'slider-no-arrows'; } $gallery_class[] = 'slider row row-small row-slider slider-nav-small small-columns-4'; ?> <div class="<?php echo implode(' ', $gallery_class); ?>" data-flickity-options='{ "cellAlign": "<?php echo $thumb_cell_align;?>", "wrapAround": false, "autoPlay": false, "prevNextButtons": true, "asNavFor": ".product-gallery-slider", "percentPosition": true, "imagesLoaded": true, "pageDots": false, "rightToLeft": <?php echo $rtl; ?>, "contain": true }' ><?php ?> <?php if ( has_post_thumbnail() ) : ?> <?php $image_size = 'thumbnail'; // Check if custom gallery thumbnail size is set and use that if( fl_woocommerce_version_check('3.3.3') ) { $image_check = wc_get_image_size( 'gallery_thumbnail' ); if($image_check['width'] !== 100) $image_size = 'gallery_thumbnail'; } $gallery_thumbnail = wc_get_image_size( $image_size ); ?> <div class="col is-nav-selected first"> <a> <?php $image_id = get_post_thumbnail_id($post->ID); $image = wp_get_attachment_image_src( $image_id, apply_filters( 'woocommerce_gallery_thumbnail_size', 'woocommerce_'.$image_size ) ); $image_alt = get_post_meta( $image_id, '_wp_attachment_image_alt', true ); $image = '<img src="'.$image[0].'" alt="'.$image_alt.'" width="'.$gallery_thumbnail['width'].'" height="'.$gallery_thumbnail['height'].'" class="attachment-woocommerce_thumbnail" />'; echo $image; ?> </a> </div> <?php endif; foreach ( $attachment_ids as $attachment_id ) { $classes = array( '' ); $image_class = esc_attr( implode( ' ', $classes ) ); $image = wp_get_attachment_image_src( $attachment_id, apply_filters( 'woocommerce_gallery_thumbnail_size', 'woocommerce_'.$image_size )); $image_alt = get_post_meta( $attachment_id, '_wp_attachment_image_alt', true ); $image = '<img src="'.$image[0].'" alt="'.$image_alt.'" width="'.$gallery_thumbnail['width'].'" height="'.$gallery_thumbnail['height'].'" class="attachment-woocommerce_thumbnail" />'; echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', sprintf( '<div class="col"><a>%s</a></div>', $image ), $attachment_id, $post->ID, $image_class ); $loop++; } $thumbnail_id = get_post_thumbnail_id($post->ID); $thumbnail_url = wp_get_attachment_image_url($thumbnail_id, 'woocommerce_thumbnail'); ?> <?php $video_url = get_field('product_video_url', $post->ID); if(!empty( $video_url)){?> <div class="col is-nav-selected col-video "> <a href="#lightbox-video" class="ux-lightbox-item mfp-iframe video-thumbnail"> <img class="attachment-woocommerce_gallery_thumbnail" src="<?php echo $thumbnail_url;?>" alt="Product Video"> <span class="video-icon" style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 30px; color: white;"><i class="icon-play"></i></span> </a> </div> <?php } ?> </div><!-- .product-thumbnails --> <?php } ?>
Đoạn code trên sẽ chèn video vào cuối Gallery, nếu bạn muốn video lên đầu thì thêm đoạn css này vào nhé:
.product-thumbnails .flickity-slider{ left: 160px !important; } .product-thumbnails .flickity-slider .col-video{ left: -160px !important; }
Trên mobile thì các bạn để như này:
.product-thumbnails .flickity-slider{ left: 95px !important; } .product-thumbnails .flickity-slider .col-video{ left: -95px !important; }
Như vậy là oke nhé !