Добавьте название под изображениями галереи продуктов WooCommerce - PullRequest
0 голосов
/ 03 октября 2018

Я хочу получить заголовок каждого изображения для отображения под каждым изображением в галерее продуктов Woocommerce.Не главное изображение, а уменьшенные миниатюры, на которые можно кликать.

На всех моих изображениях в настоящее время установлены заголовки.

Я посмотрел в product-thumbnails.php и нашел этот код:

if ( $attachment_ids && has_post_thumbnail() ) {
foreach ( $attachment_ids as $attachment_id ) {
    echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', wc_get_gallery_image_html( $attachment_id  ), $attachment_id );
}
}

Я считаю, что это то, что мне нужно отредактировать, но я не уверен, что добавить.

Я также нашел этот пост, где просили похожую вещь, но для подписей Показать подписьв галерее продуктов в WooCommerce , но когда я его добавляю, он не работает

Есть идеи?

РЕДАКТИРОВАТЬ

Итак, я скопировал функцию из wc-template-functions.php в мой файл functions.php дочерних тем:

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 );
$image             = wp_get_attachment_image( $attachment_id, $image_size, false, array(
    'title'                   => get_post_field( 'post_title', $attachment_id ),
    'data-caption'            => get_post_field( 'post_excerpt', $attachment_id ),
    'data-src'                => $full_src[0],
    'data-large_image'        => $full_src[0],
    'data-large_image_width'  => $full_src[1],
    'data-large_image_height' => $full_src[2],
    'class'                   => $main_image ? 'wp-post-image' : '',
) );

return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_src[0] ) . '">' . $image . '</a></div>';
}

Я также переименовал функцию wc_get_gallery_image_with_title_html , а такжеизменив строку возврата на эту:

return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_src[0] ) . '">' . $image . $imageTitle . '</a></div>';

Кажется, это не работает.Однако, если я добавлю слово TEST вместо $ imageTitle в обратной строке выше, чтобы увидеть, появится ли что-нибудь, слово TEST появится под каждым изображением.

Тест слова не появляется под каждым эскизом, хотя он появляется под изображением главной галереи.

Что я здесь упускаю или делаю неправильно?

РЕДАКТИРОВАТЬ

Теперь заголовок отображается благодаря помощи Зипкундана, ноэто показано под основным изображением, а не под каждым эскизом.Как я могу переместить его, чтобы показать под каждой соответствующей миниатюрой?

enter image description here

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Поскольку миниатюры изображений галереи генерируются динамически и добавляются с помощью javascript, его можно настроить только с помощью javascript.

Следующая пользовательская функция javascript добавит заголовок изображения продукта в галерее к соответствующему миниатюре в галереенавигация.

jQuery(window).load(function(){
if( jQuery('body').hasClass('single-product') ){
var imgtitles = [];
jQuery('.woocommerce-product-gallery__wrapper').children('div').each(function(){
    var imgTitle = jQuery(this).find('a').find('img.wp-post-image').attr('title');
    console.log(imgTitle);
    imgtitles.push(imgTitle);
});
if( jQuery('ol.flex-control-nav').length && jQuery('ol.flex-control-nav').children().length>1 ){
    for(i=0; i<imgtitles.length; ++i){
        jQuery('ol.flex-control-nav li:nth-child('+(i+1)+')').append('<span class="flexthum-title">'+imgtitles[i]+'</span>');
    }
}
}});

Рабочий пример можно посмотреть здесь.http://woocom.stuprohosting.in/product/vneck-tee/

Если это даст желаемый результат, я бы порекомендовал отменить изменения, внесенные вами в «functions.php» и «product-thumbnails.php», которые я предложил в предыдущем ответе.

Я использовал плагин «Сценарии верхнего и нижнего колонтитула» для добавления этой пользовательской функции в нижний колонтитул веб-сайта.https://wordpress.org/plugins/header-and-footer-scripts/

0 голосов
/ 24 января 2019
jQuery(window).load(function(){
if( jQuery('body').hasClass('single-product') ){
var imgtitles = [];
jQuery('.woocommerce-product-gallery__wrapper').children('div').each(function(){
    var imgTitle = jQuery(this).find('a').find('img').attr('data-caption');
    console.log(imgTitle);
    imgtitles.push(imgTitle);
});
if( jQuery('ol.flex-control-nav').length && jQuery('ol.flex-control-nav').children().length>1 ){
    for(i=0; i<imgtitles.length; ++i){
        jQuery('ol.flex-control-nav li:nth-child('+(i+1)+')').append('<span class="flexthum-title">'+imgtitles[i]+'</span>');
    }
}
}});
0 голосов
/ 03 октября 2018

Здесь " wc_get_gallery_image_html ($ attachment_id) " (один из аргументов в фильтре) - это то, что выводит окончательный html.Эта функция определена в " wc-template-functions.php ".Таким образом, вы не можете изменить эту функцию.Вы можете увидеть код функции по следующему адресу: http://woocommerce.wp -a2z.org / oik_api / wc_get_gallery_image_html /

Что ж, вот несколько советов, которые помогут вам тренироваться.Надеюсь, вы используете детскую тему.Скопируйте код функции (функция, которая передается в качестве аргумента в фильтре) в файл " functions.php " вашей дочерней темы.Назовите функцию как-нибудь по-другому, скажите « wc_get_gallery_image_with_title_html ».Измените этот код, чтобы добавить заголовок изображения в оператор возврата.Что-то вроде:

return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_src[0] ) . '">' . $image . $imageTitle . '</a></div>';

Где, $ imageTitle будет заголовком изображения, заключенным в какой-либо HTML-тег, такой как 'span' или 'p'.

Тогдаскопируйте файл «product-thumbnails.php» в свою дочернюю тему и замените исходный аргумент функции новой созданной вами функцией.Таким образом, код выглядит следующим образом:

if ( $attachment_ids && has_post_thumbnail() ) {
foreach ( $attachment_ids as $attachment_id ) {
    echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', wc_get_gallery_image_with_title_html( $attachment_id  ), $attachment_id );
}}

Надеюсь, это поможет.

Обновление (после редактирования)

Привет, Кики,

Вы пропустили вывод заголовка изображения в функции.Ниже приведена обновленная функция.

function wc_get_gallery_image_with_title_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 );
$image             = wp_get_attachment_image( $attachment_id, $image_size, false, array(
    'title'                   => get_post_field( 'post_title', $attachment_id ),
    'data-caption'            => get_post_field( 'post_excerpt', $attachment_id ),
    'data-src'                => $full_src[0],
    'data-large_image'        => $full_src[0],
    'data-large_image_width'  => $full_src[1],
    'data-large_image_height' => $full_src[2],
    'class'                   => $main_image ? 'wp-post-image' : '',
) );
$imageTitle         = '<span>' . esc_html( get_the_title($attachment_id) ) . '</span>';

return '<div data-thumb="' . esc_url( $thumbnail_src[0] ) . '" class="woocommerce-product-gallery__image"><a href="' . esc_url( $full_src[0] ) . '">' . $image . $imageTitle . '</a></div>';
}

Обратите внимание на строку перед оператором return.

Попробуйте использовать вышеуказанную функцию и не забудьте изменить функцию аргумента в "product-thumbnails.php".

Кроме того, как только вы получите отображаемый текст заголовка изображения, вам может потребоваться добавить некоторые правила CSS для правильного отображения текста.

Надеюсь, что это такработы.

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