Я пытаюсь создать динамическую галерею товаров на основе цветов на странице товаров woocommerce. Когда я нажимаю на один цвет, например на красный, я должен видеть фотографии Красной галереи.
Для этого я заменил весь блок галереи woocommerce на новый, созданный ajax (у которого те же классы старой галереи).
Загрузка новых фотографий работает нормально, и я получаю галерею фотографий на основе цвета.
Но когда ajax загружает новую галерею, слайдер не работает, я думаю, потому что woocommere js, который создает слайдер, доступен только для чтения при загрузке страницы.
Думаю, мне следует перезагрузить некоторую функцию Woocommerce JS, чтобы воссоздать слайдер с его функциями, но я не знаю, как.
Это php-файл, который я создаю новую галерею, вызванную из ajax:
global $product;
$current_id = "";
if(isset($_POST['prodid']) && $_POST['prodid'] != "" ) {
$current_id = $_POST['prodid'];
$product = new WC_Product($current_id);
}
$columns = apply_filters( 'woocommerce_product_thumbnails_columns', 4 );
$post_thumbnail_id = $product->get_image_id();
$wrapper_classes = apply_filters( 'woocommerce_single_product_image_gallery_classes', array(
'woocommerce-product-gallery',
'woocommerce-product-gallery--' . ( $product->get_image_id() ? 'with-images' : 'without-images' ),
'woocommerce-product-gallery--columns-' . absint( $columns ),
'images',
) );
?>
<figure class="woocommerce-product-gallery__wrapper">
<?php
if ( $product->get_image_id() ) {
$html = wc_get_gallery_image_html( $post_thumbnail_id, true );
} else {
$html = '<div class="woocommerce-product-gallery__image--placeholder">';
$html .= sprintf( '<img src="%s" alt="%s" class="wp-post-image" />', esc_url( wc_placeholder_img_src( 'woocommerce_single' ) ), esc_html__( 'Awaiting product image', 'woocommerce' ) );
$html .= '</div>';
}
echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', $html, $post_thumbnail_id ); // phpcs:disable WordPress.XSS.EscapeOutput.OutputNotEscaped
do_action( 'woocommerce_product_thumbnails' );
?>
</figure>
Это ajax-функция, вызываемая при щелчке цвета блока
function changeGallery(selected_gallery, productID) {
jQuery(function($) {
var select_color = selected_gallery;
var xhttp;
$.ajax({
url : 'https://mysite.it/wp-admin/admin-ajax.php', // AJAX handler
data : { action : 'load_gallery', gallery : select_color, prodid : productID },
type : 'POST',
beforeSend: function() {
},
success : function( result ){
if( result ) {
$('.woocommerce-product-gallery').html(result);
//Reload here some woocommerce JS funcions?
}
}
});
});
}