Как сделать миниатюру в woocommerce фоном?
Добрый день! Хочу вывести миниатюры подкатегорий в категориях woocommerce не через img, а через background, есть варианты, как сделать? Или возможно есть вариант какой-то, чтобы обернуть тег img в div? Миниатюры товаров обернул, а на подкатегории не работает мой код.
Дополнительно:
Решение. Если кому-то надо будет. В теме у меня есть файл woocommerce.php, там была функция woocommerce_content(); скопировал ее в functions, обозвал woocommerce_content2(), там через код вывел категории, как мне надо
Ответы:
Предлагаю следующее правило CSS для элемента:
background-image: url(https://настоящая ссылка);
- так надо див тогда добавить вместо тега img, чтобы правило это применять, а как это сделать не понятно
- Ищите, какой шаблон в WooCommerce отвечает за вывод подкатегорий и переопределяйте его в своей теме
Пример, как это сделать, уже дан на wordpress.stackoverflow: https://wordpress.stackexchange.com/questions/2560...
- jazzman7, Либо можно применить класс ко всем тем элементам которым требуется фон изображением. Например class="img-background"
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для подкатегорий WooCommerce миниатюры выводятся не тем же шаблоном, что товары. Обычно отвечает шаблон
content-product_cat.php. Его можно переопределить в дочерней теме и вывести картинку как фон.Скопируйте файл:
wp-content/plugins/woocommerce/templates/content-product_cat.php wp-content/themes/your-child-theme/woocommerce/content-product_cat.php
В шаблоне получите ID миниатюры категории и URL изображения:
<?php $thumbnail_id = get_term_meta($category->term_id, 'thumbnail_id', true); $image_url = $thumbnail_id ? wp_get_attachment_image_url($thumbnail_id, 'woocommerce_thumbnail') : wc_placeholder_img_src(); ?> <li <?php wc_product_cat_class('', $category); ?>> <a href="<?php echo esc_url(get_term_link($category, 'product_cat')); ?>"> <span class="category-thumb-bg" style="background-image: url('<?php echo esc_url($image_url); ?>');"></span> <h2 class="woocommerce-loop-category__title"> <?php echo esc_html($category->name); ?> </h2> </a> </li>
CSS:
.category-thumb-bg { display: block; aspect-ratio: 1 / 1; background-size: cover; background-position: center; background-repeat: no-repeat; }
Копировать целиком
woocommerce_content()вfunctions.php— рабочий, но хрупкий путь: при обновлениях WooCommerce сложнее поддерживать. Лучше переопределять конкретный шаблон WooCommerce или использовать hooks, если нужно только обернуть изображение.Миниатюра подкатегории WooCommerce хранится в meta термина
thumbnail_id. Поэтому можно не пытаться оборачивать стандартный<img>, а получить URL картинки и вывести свой блок сbackground-image.$thumbnail_id = get_term_meta($category->term_id, 'thumbnail_id', true); $image_url = $thumbnail_id ? wp_get_attachment_image_url($thumbnail_id, 'medium') : wc_placeholder_img_src(); echo '<div class="product-cat-card__image" style="background-image:url(' . esc_url($image_url) . ')"></div>';
CSS:
.product-cat-card__image { width: 100%; aspect-ratio: 4 / 3; background-size: cover; background-position: center; border-radius: 12px; }
Если вы переопределяете стандартный шаблон WooCommerce, смотрите файлы
content-product_cat.phpили hooks вокругwoocommerce_subcategory_thumbnail(). Можно отключить стандартную миниатюру и вывести свою:remove_action('woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail', 10);
Но полностью копировать
woocommerce_content()в functions.php — не лучший путь: при обновлениях WooCommerce можно получить расхождения. Безопаснее переопределить нужный template в дочерней теме или повеситься на hook, который отвечает только за миниатюру категории.