WooCommerce: изменение версии изображения в навигации по галерее FlexSlider - PullRequest
0 голосов
/ 01 августа 2020

Я хочу изменить версию изображения, используемую FlexSlider на странице продукта WooCommerce. На данный момент слайдер использует для навигации по галерее размер thumbnail. Но этот размер изображения обрезан, и мне нужна версия без кадра. В WooCommerce уже есть размер, который я мог бы использовать: woocommerce_gallery_thumbnail

К сожалению, я не смог найти ни одного крючка или опции для изменения используемого изображения. Я нашел и использовал фильтр woocommerce_single_product_carousel_options.

На данный момент я использую только один его вариант:

$options['controlNav'] = wp_is_mobile() ? true : 'thumbnails';

Но я не вижу возможности изменить используемое изображение версия. Есть ли что-нибудь, что я мог бы использовать / hook?

Хорошо, я попытался использовать следующий фильтр: (https://github.com/woocommerce/woocommerce/blob/df94b6570df6f6002f61c9e53c8054eb77c2c405/includes/wc-template-functions.php#L1499)

function wc_get_gallery_image_html( $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 href="' . esc_url( $full_src[0] ) . '">' . $image . '</a></div>';
}

Есть варианты для $gallery_thumbnail, $thumbnail_size и $thumbnail_src.

Я не знаю, какой из них является правильным для изменения вывода эскиза навигации по галерее.

Я попробовал следующий код но я не уверен, что этот код правильный (он ничего не делает):

add_filter( 'woocommerce_gallery_thumbnail_size', function( $thumbnail_size ) {
    return array(
        'woocommerce_gallery_thumbnail',
    );
} );

Я читал в документации, что есть только хуки для woocommerce_gallery_thumbnail_size, woocommerce_gallery_image_size и woocommerce_gallery_full_size и они принимают размеры изображения на основе имени или массив значений ширины / высоты.

Так что, я думаю, правильным будет woocommerce_gallery_thumbnail_size?!

Или весь подход неверен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...