В Woocommerce размер изображения миниатюры товара в категории и размер миниатюры категории и подкатегории устанавливается совместно в Настройки → Товары → Размеры изображений товара → Изображение каталога.
Задача была установить размеры миниатюры для категорий и подкатегорий отличные от изображений каталога.
Например: размер изображений категорий/подкатегорий 300 на 300 в то время как настойки изображений каталога (изображений миниатюры товара в выдаче категорий) будут 300 на 400.
Столкнувшись с такой проблемой, готового решения я не нашел. Как временный вариант, я придумал такой хук:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | add_action( 'woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail_hook', 2 ); function woocommerce_subcategory_thumbnail_hook( $category ) { $small_thumbnail_size = apply_filters( 'woocommerce_subcategory_thumbnail', 'full' ); $dimensions = wc_get_image_size( $small_thumbnail_size ); $thumbnail_id = get_woocommerce_term_meta( $category->term_id, 'thumbnail_id', true ); if ( $thumbnail_id ) { $image = wp_get_attachment_image_src( $thumbnail_id, $small_thumbnail_size ); $image = $image[0]; $image_srcset = function_exists( 'wp_get_attachment_image_srcset' ) ? wp_get_attachment_image_srcset( $thumbnail_id, $small_thumbnail_size ) : false; $image_sizes = function_exists( 'wp_get_attachment_image_sizes' ) ? wp_get_attachment_image_sizes( $thumbnail_id, $small_thumbnail_size ) : false; } else { $image = wc_placeholder_img_src(); $image_srcset = $image_sizes = false; } if ( $image ) { // Prevent esc_url from breaking spaces in urls for image embeds. // Ref: https://core.trac.wordpress.org/ticket/23605. $image = str_replace( ' ', '%20', $image ); // Add responsive image markup if available. if ( $image_srcset && $image_sizes ) { echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" srcset="' . esc_attr( $image_srcset ) . '" sizes="' . esc_attr( $image_sizes ) . '" />'; } else { echo '<img src="' . esc_url( $image ) . '" alt="' . esc_attr( $category->name ) . '" width="' . esc_attr( $dimensions['width'] ) . '" height="' . esc_attr( $dimensions['height'] ) . '" />'; } } } |
Код взят из файла wc-template-functions.php
В строчке
1 | $small_thumbnail_size = apply_filters( 'woocommerce_subcategory_thumbnail', 'full' ); |
меняем размер на нужный вам.
В Вашем варианте необходимо отключить старый способ, чтобы не дублировались изображения
remove_action(‘woocommerce_before_subcategory_title’, ‘woocommerce_subcategory_thumbnail’, 10);
Но есть более элегантный способ:
Добавляем фильтр:
function thumb_of_category($size)
{
return array(500, 500,true);
}
add_filter(‘subcategory_archive_thumbnail_size’, ‘thumb_of_category’);
где array(500, 500,true); желаемый размер миниатюры, если он отличается от зарегистрированных, то добавляем. В данном случае:
add_image_size( ‘cat_thumb’, 500,500, 1 );
Добрый день,
Скажите как указать, чтобы этот код применялся к конкретной категории товаров.
и непонятно как указывать размер миниатюры???
$small_thumbnail_size = apply_filters( ‘woocommerce_subcategory_thumbnail’, ‘full’ );
$small_thumbnail_size = apply_filters( ‘woocommerce_subcategory_thumbnail’, ‘400’,’500′) так???
Если нужно применить к конкретной категории, то нужно сначала написать условие с определением этой категории, что то типа такого:
А как вывести текст под названием категории, на странице со списком подкатегорий. Конкретно под woocommerce_template_loop_category_title или под картинкой категории. Не хватает описания категории для удобства пользователей. Спасибо.
У категорий есть описание, но оно обычно выводиться вверху. Его просто нужно перенести вниз.