Пользовательский размер изображения в Woocommerce

5 мая 2015 г., 19:40:40
Просмотры: 20.6K
Голосов: 1

В Woocommerce есть три встроенных размера изображений. Но поскольку существует более трех различных размеров контейнеров, некоторые изображения всегда растягиваются или сжимаются. В результате страдает качество изображений и скорость загрузки страницы. Woocommerce использует, например, размер каталога для изображений каталога и связанных товаров. WordPress предлагает простой метод для создания пользовательских размеров изображений. И я попытался создать размер для моих связанных товаров:

add_action( 'after_setup_theme', 'jmt_theme_setup' );
function jmt_theme_setup() {
    // Добавляем пользовательский размер изображения для связанных товаров
    add_image_size( 'related-thumb', 274, 274, true );
}

Есть ли способ использовать этот размер для изображений связанных товаров в woocommerce?

Спасибо за ваш интерес.

С уважением, тео

2
Комментарии

Настоящая проблема заключается в CSS WooCommerce. Я считаю, что у них все изображения имеют width: 100%; height: auto;, что некоторые темы не учитывают. Я предлагаю переопределить этот CSS с помощью max-width: 100%; width: auto;.

Howdy_McGee Howdy_McGee
5 мая 2015 г. 19:43:33

Да, я могу подтвердить. Max-width:100%; уменьшает контейнер изображения связанного товара до размера контейнера изображения каталога. Но это также изменяет макет. Моя цель или, скорее, моя идея — кастомизировать размер изображения.

timholz timholz
5 мая 2015 г. 19:49:52
Все ответы на вопрос 3
3

Вы можете переопределить 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;
}
5 мая 2015 г. 19:47:56
Комментарии

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

timholz timholz
5 мая 2015 г. 19:58:20

Я добавил img к CSS-правилам, можешь проверить сейчас?

m4n0 m4n0
5 мая 2015 г. 20:00:34

Спасибо за обновление. Но нет, теперь пропорции больше не квадратные, и css влияет только на контейнер. Что я пытался сделать - это подключить подходящий размер изображения. Но, как я теперь понимаю, это довольно сложно реализовать.

timholz timholz
5 мая 2015 г. 20:11:12
12

При изменении размеров изображений у вас есть несколько вариантов. Замена стандартных изображений 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:

5 мая 2015 г. 19:58:00
Комментарии

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

timholz timholz
5 мая 2015 г. 20:04:54

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

Howdy_McGee Howdy_McGee
5 мая 2015 г. 20:19:24

Большое спасибо за это. Я попробую и дам вам знать.

timholz timholz
5 мая 2015 г. 21:28:05

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

timholz timholz
6 мая 2015 г. 21:06:08

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

Howdy_McGee Howdy_McGee
6 мая 2015 г. 21:07:30

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

timholz timholz
7 мая 2015 г. 11:22:12

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

Howdy_McGee Howdy_McGee
7 мая 2015 г. 17:38:42

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

timholz timholz
8 мая 2015 г. 22:05:40

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

timholz timholz
8 мая 2015 г. 23:14:56

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

Howdy_McGee Howdy_McGee
8 мая 2015 г. 23:18:03

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

timholz timholz
9 мая 2015 г. 13:08:07

я заметил одну вещь. Рекомендуемые товары (когда макет установлен на полную ширину) используют размер для каталога и поэтому выглядят размытыми. Я попробовал применить тот же метод для этого класса, но, видимо, они обрабатываются по-другому.

timholz timholz
11 мая 2015 г. 12:04:58
Показать остальные 7 комментариев
0

Думаю, это проблема CSS, потому что WooCommerce (раздражающе) использует width: 100%, когда (по моему мнению) должно быть max-width: 100%. Попробуйте переопределить ширину с помощью width: auto, это должно помочь.

5 мая 2015 г. 19:48:11