Як вивести додаткове зображення при наведенні на товар в WooCommerce

Як вивести додаткове зображення при наведенні на товар в WooCommerce

Woocommerce

Щоб показувати додаткове зображення при наведенні на товар у WooCommerce, можна використати плагін або додати власний код у тему. У цьому прикладі ми виведемо перше зображення з галереї товару як друге фото для hover-ефекту.

Рекомендація: додавати PHP-код краще у functions.php дочірньої теми або через плагін типу Code Snippets, а не в основну тему.

PHP-код для functions.php

Додайте цей код у файл functions.php вашої теми:

function vchuy_second_thumb_product() {
    $product = wc_get_product( get_the_ID() );

    if ( ! $product ) {
        return;
    }

    $attachment_ids = $product->get_gallery_image_ids();

    if ( is_array( $attachment_ids ) && ! empty( $attachment_ids ) ) {
        $first_image_url = wp_get_attachment_url( $attachment_ids[0] );
        ?>
        <img class="second-img-product" src="<?php echo esc_url( $first_image_url ); ?>" alt="">
        <?php
    }
}

add_action( 'woocommerce_before_shop_loop_item_title', 'vchuy_second_thumb_product', 20 );

Редагування content-product.php

Далі скопіюйте файл:

/wp-content/plugins/woocommerce/templates/content-product.php

у вашу тему за шляхом:

/wp-content/themes/ваша-тема/woocommerce/content-product.php

Після цього обгорніть вивід зображення товару в окремий контейнер:

<div class="ps-product__thumbnail">
    <?php
    /**
     * Hook: woocommerce_before_shop_loop_item_title.
     *
     * @hooked woocommerce_show_product_loop_sale_flash - 10
     * @hooked woocommerce_template_loop_product_thumbnail - 10
     */
    do_action( 'woocommerce_before_shop_loop_item_title' );
    ?>
</div>

Це потрібно для того, щоб основне і додаткове зображення були всередині одного контейнера та коректно працювали зі стилями hover.

CSS для hover-ефекту

Після цього додайте CSS для правильного відображення другого зображення:

.ps-product__thumbnail {
    position: relative;
    overflow: hidden;
    z-index: 10;
}

.product .ps-product__thumbnail img {
    width: 100%;
    height: auto;
    opacity: 1;
    transition: all 0.4s cubic-bezier(0.7, 0, 0.3, 1);
}

.product .ps-product__thumbnail img.second-img-product {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    opacity: 0;
    visibility: hidden;
}

.product:hover .ps-product__thumbnail img:first-child {
    opacity: 0;
    visibility: hidden;
}

.product:hover .ps-product__thumbnail img.second-img-product {
    opacity: 1;
    visibility: visible;
}