У меня проблема с получением первого изображения галереи woocommerce, если отсутствует миниатюра поста. Я хочу показать миниатюру записи, если она отсутствует, первое изображение галереи WooCommerce и, по крайней мере, изображение заполнителя, если все отсутствует.
Я нашел эту функцию в Кодексе WooCommerce, но я не нашел удовлетворительного решения. Может быть, кто-то может помочь мне получить хорошее решение
function woocommerce_get_product_thumbnail( $size = 'shop_catalog', $deprecated1 = 0, $deprecated2 = 0 ) {
global $post;
$image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );
if ( has_post_thumbnail() ) {
$props = wc_get_product_attachment_props( get_post_thumbnail_id(), $post );
return get_the_post_thumbnail( $post->ID, $image_size, array(
'title' => $props['title'],
'alt' => $props['alt'],
) );
} elseif ( wc_placeholder_img_src() ) {
return wc_placeholder_img( $image_size );
}
}
}
Итак, я нашел в себе душу. Не так идеально, как я хотел, но это работает. Я отправлю этот ответ, если кто-то ищет подобное решение. Итак, это может быть способ:
/* GET PRODUCT IMAGE WITH GALLERY FALLBACK
================================================== */
if ( ! function_exists( 'zet_get_prod_image_fallback_gallery' ) ) {
function zet_get_prod_image_fallback_gallery() {
global $post, $woocommerce, $product;
$image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );
$thumb_gallery_ids = $product->get_gallery_attachment_ids();
if ( has_post_thumbnail() || $thumb_gallery_ids ) {
if ( has_post_thumbnail() ) {
$image_id = get_post_thumbnail_id();
} else {
$image_id = $thumb_gallery_ids[0];
}
$thumb_image = wp_get_attachment_url( $image_id, apply_filters( 'single_product_small_thumbnail_size', 'shop_thumbnail' ) );
$image_html = '<img src="'.$thumb_image.'" />';
echo $image_html;
// Get the Placeholder image
} elseif ( wc_placeholder_img_src() ) {
echo wc_placeholder_img( $image_size );
}
}
}
Для пользователей, которые не очень знакомы с WordPress: добавьте этот фрагмент в ваши functions.php
Если вы хотите использовать этот запасной вариант для всего своего магазина -> измените функцию woocommerce_template_loop_product_thumbnail () в woocommerce / content-product.php для zet_get_prod_image_fallback_gallery (). Надеюсь, поможет!
Других решений пока нет …