Пользовательский размер изображения в Woocommerce
В Woocommerce есть три встроенных размера изображений. Но поскольку существует более трех различных размеров контейнеров, некоторые изображения всегда растягиваются или сжимаются. В результате страдает качество изображений и скорость загрузки страницы. Woocommerce использует, например, размер каталога для изображений каталога и связанных товаров. WordPress предлагает простой метод для создания пользовательских размеров изображений. И я попытался создать размер для моих связанных товаров:
add_action( 'after_setup_theme', 'jmt_theme_setup' );
function jmt_theme_setup() {
// Добавляем пользовательский размер изображения для связанных товаров
add_image_size( 'related-thumb', 274, 274, true );
}
Есть ли способ использовать этот размер для изображений связанных товаров в woocommerce?
Спасибо за ваш интерес.
С уважением, тео

Вы можете переопределить CSS WooCommerce с помощью этого сниппета от Реми Корсон:
<?php
add_filter( 'wp_head' , 'related_products_style' );
function related_products_style() {
if( is_product() ) :
?>
<style>
.woocommerce .related ul.products li.product img, .woocommerce .related ul li.product img, .woocommerce .upsells.products ul.products li.product img, .woocommerce .upsells.products ul li.product img, .woocommerce-page .related ul.products li.product img, .woocommerce-page .related ul li.product img, .woocommerce-page .upsells.products ul.products li.product img, .woocommerce-page .upsells.products ul li.product img
{
width: 274px !important;
height: 274px !important;
}
</style>
<?php
endif;
}

Спасибо за код, но переопределение css не применяет правильные размеры изображений. Оно устанавливает только размер контейнера.

При изменении размеров изображений у вас есть несколько вариантов. Замена стандартных изображений WooCommerce сложнее, чем в обычной установке WordPress, так как они встроены в плагин.
Изменение размеров изображений связанных товаров:
Я протестировал этот метод, и он работает только для связанных товаров (хотя его можно расширить и на другие области). Возможно, вам всё равно придётся воспользоваться Regenerate Thumbnails, чтобы получить правильные размеры.
Нам нужно добавить всё в фильтр wp
:
function woo_init() {
// Здесь будут функции...
}
add_action( 'wp', 'woo_init' );
Я смог пропустить первую часть, установку переменной запроса, и всё равно получить рабочий результат, но так как используется общий шаблон content-product.php
, я бы не стал на это полагаться. Поэтому мы установим переменную запроса, чтобы убедиться, что изменяем размер изображения только для связанных товаров:
if( is_singular( 'product' ) ) {
add_filter( 'woocommerce_related_products_args', function( $query_args ) {
if( ! empty( $query_args ) ) {
set_query_var( 'related_products', true );
}
return $query_args;
} );
}
Далее нам нужно удалить стандартный loop_product_thumbnail
и заменить его нашим кастомным. Мы проверяем, установлена ли переменная realted_products
и имеет ли она значение TRUE
, прежде чем выводим наше новое изображение. В противном случае выводим изображение по умолчанию.
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
add_action( 'woocommerce_before_shop_loop_item_title',
function() {
$related = get_query_var( 'related_products' );
if( TRUE == $related ) {
echo woocommerce_get_product_thumbnail( 'related-thumb', 274, 274 ); // Наш новый размер изображения
} else {
echo woocommerce_get_product_thumbnail(); // Размер изображения по умолчанию
}
},
10
);
CSS
WooCommerce использует width: 100%; height: auto;
для всех изображений. Вы можете изменить это на max-width: 100%; width: auto; height: auto;
и поиграть с отступами / количеством колонок, чтобы получить желаемый вид.
Изменение начальных размеров изображений
Вы можете изменить стандартные размеры изображений WooCommerce, выполнив следующие шаги:
- Войдите в WordPress
- Перейдите в
WooCommerce -> Вкладка "Товары" -> Подвкладка "Отображение"
- Внизу вы можете установить размеры изображений для:
- Изображений каталога
- Изображений отдельных товаров
- Миниатюр товаров
- Наконец, вы можете установить Regenerate Thumbnails, чтобы применить новые размеры.
Другой способ — установить эти размеры при установке:
function yourtheme_woocommerce_image_dimensions() {
global $pagenow;
if ( ! isset( $_GET['activated'] ) || $pagenow != 'themes.php' ) {
return;
}
$catalog = array(
'width' => '400', // px
'height' => '400', // px
'crop' => 1 // true
);
$single = array(
'width' => '600', // px
'height' => '600', // px
'crop' => 1 // true
);
$thumbnail = array(
'width' => '120', // px
'height' => '120', // px
'crop' => 0 // false
);
// Размеры изображений
update_option( 'shop_catalog_image_size', $catalog ); // Миниатюры категорий товаров
update_option( 'shop_single_image_size', $single ); // Изображение отдельного товара
update_option( 'shop_thumbnail_image_size', $thumbnail ); // Миниатюры галереи
}
add_action( 'after_switch_theme', 'yourtheme_woocommerce_image_dimensions', 1 );
Ссылки на документацию WooCommerce:

Спасибо. Я попробовал все это. Но, похоже, единственное решение — пойти на компромисс. Это означает один размер для связанных и каталоговых изображений. Мне просто было интересно, есть ли простой способ добавить четвертый размер изображения. С уважением, Тео.

@theo - К сожалению, насколько мне известно, такого способа нет. Теоретически, вы можете переопределить шаблон WooCommerce своим собственным, создать свой собственный WP_Query и сгенерировать такой же цикл, но вызывать ваше пользовательское изображение таким образом. Возможно, есть и другой способ, который я никогда не пробовал, но я отредактирую свой вопрос с ним, и, возможно, вам повезет.

Хорошо, я попробовал и не получилось. Пожалуй, придется смириться с этим ограничением. Но спасибо за все подсказки.

@timholz У меня сейчас нет активной установки WooCommerce, чтобы поэкспериментировать с этим. Как только появится возможность, я попробую и посмотрю, что получится. Если найду решение, я отмечу тебя и дам знать. Или если ты найдешь лучшее решение - опубликуй его здесь! Удачи!

Привет, Howdy Mc Gee, спасибо за ответ. Пока что я назначил наибольшие размеры для связанных и каталогных изображений. Выглядит нормально, но немного теряется скорость, так как изображения каталога приходится масштабировать. Но в любом случае, спасибо за заботу. :) Тео

@timholz Я нашел решение, которое модифицировал в своем ответе и добавил его в начало. Я взял исходную теорию, протестировал ее, и она должна работать для связанных товаров. Вероятно, можно адаптировать и для других типов товаров. Если у вас это сработало, не забудьте отметить галочкой, чтобы показать будущим читателям, что решение рабочее!

– Спасибо за ваши усилия. Сейчас уже поздно, но завтра я протестирую код и отпишусь о результатах.

Привет, Howdy McGee – я не смог дождаться завтра. Твой код отлично работает. Именно условие делает всю магию. Большое спасибо за твое время и усилия. Сайт, над которым я работаю, сейчас в режиме разработки, но как только он будет готов, я пришлю тебе ссылку (на случай, если тебе интересно). Еще раз огромное спасибо. С уважением, Тео. P.S.: Я попытался повысить твой рейтинг, но, увы, моей репутации недостаточно. Так что я просто голосую за тебя здесь. Ответ высшего уровня.

@timholz Рад, что это сработало для вас! Пожалуйста, не забудьте отметить ответ галочкой, чтобы будущие читатели знали, что он решил ваш вопрос (комментарии скрываются после определенного времени). Также рекомендую вернуться к другим вашим прошлым вопросам и сделать то же самое (даже если вы сами на них ответили). Это отличный и простой способ заработать репутацию, а также выразить благодарность!

вот ссылка:www.j-m-t.ch Теперь у меня правильные размеры изображений для товаров в каталоге и связанных товаров. спасибо
