Tamaño de imagen personalizado para Woocommerce

5 may 2015, 19:40:40
Vistas: 20.6K
Votos: 1

Woocommerce tiene tres tamaños de imagen incorporados. Pero dado que hay más de tres tamaños diferentes de contenedor, algunas imágenes siempre se estiran o comprimen. Por lo tanto, la calidad de la imagen y la velocidad de la página se ven afectadas. Woocommerce utiliza, por ejemplo, el tamaño de catálogo para imágenes de catálogo e imágenes de productos relacionados. WordPress ofrece un método sencillo para generar tamaños de imagen personalizados. Y he intentado generar un tamaño para mis productos relacionados:

add_action( 'after_setup_theme', 'jmt_theme_setup' );
function jmt_theme_setup() {
    add_image_size( 'related-thumb', 274, 274, true );
}

¿Hay alguna manera de incorporar este tamaño en las imágenes de productos relacionados de Woocommerce?

Gracias por tu interés.

Saludos theo

2
Comentarios

El problema real está en el CSS de WooCommerce. Creo que tienen todas sus imágenes con width: 100%; height: auto; lo que algunos temas no tienen en cuenta. Sugiero sobrescribir ese CSS con max-width: 100%; width: auto; en su lugar.

Howdy_McGee Howdy_McGee
5 may 2015 19:43:33

Sí, puedo confirmarlo. Max-width:100%; reduce el contenedor de imágenes de productos relacionados al tamaño del contenedor de imágenes del catálogo. Pero también cambia el diseño. Mi objetivo o más bien mi idea es personalizar el tamaño de la imagen.

timholz timholz
5 may 2015 19:49:52
Todas las respuestas a la pregunta 3
3

Puedes sobrescribir el CSS de WooCommerce con este fragmento de código, Remi Corson:

<?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 may 2015 19:47:56
Comentarios

Gracias por el código, pero sobrescribir el CSS no aplica los tamaños correctos de las imágenes. Solo establece el tamaño del contenedor.

timholz timholz
5 may 2015 19:58:20

He añadido img a las reglas CSS, ¿puedes probar ahora?

m4n0 m4n0
5 may 2015 20:00:34

Gracias por la actualización. Pero no, ahora las proporciones ya no son cuadradas y el CSS solo afecta al contenedor. Lo que intentaba lograr era insertar el tamaño de imagen apropiado. Pero esto, como ahora aprendo, es bastante difícil de conseguir.

timholz timholz
5 may 2015 20:11:12
12

Existen algunas opciones que puedes elegir al cambiar los tamaños de imágenes. Cambiar las imágenes predeterminadas de WooCommerce es más difícil que en una instalación normal de WordPress, ya que están integradas en el plugin.


Modificar los tamaños de imágenes de productos relacionados:

He probado esto y parece funcionar solo en productos relacionados (aunque estoy seguro de que podría expandirse a otras áreas). Es posible que aún necesites aprovechar Regenerar miniaturas para obtener los tamaños correctos.

Necesitamos poner todo en un filtro wp:

function woo_init() {
    // Las funciones siguientes van aquí...
}
add_action( 'wp', 'woo_init' );

Pude omitir la primera parte de esto, estableciendo la variable de consulta y aún así funciona, pero como usa una plantilla genérica content-product.php no confiaría en ello, así que estableceremos una variable de consulta para asegurarnos de que solo cambiamos el tamaño de imagen para productos relacionados:

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;
    } );
}

A continuación, necesitamos eliminar el loop_product_thumbnail predeterminado y reemplazarlo con nuestro personalizado. Verificamos que la variable de consulta realted_products esté establecida y sea TRUE antes de servir nuestra nueva imagen; de lo contrario, servimos la imagen predeterminada.

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 );    // Nuestro nuevo tamaño de imagen
        } else {
            echo woocommerce_get_product_thumbnail();   // Tamaño de imagen predeterminado
        }
    },
    10
);

CSS

WooCommerce usa width: 100%; height: auto; en todas sus imágenes. Podrías cambiar esto a max-width: 100%; width: auto; height: auto; y jugar con los márgenes / número de columnas para obtener el aspecto deseado.

Cambiar los tamaños de imagen iniciales

Puedes cambiar los tamaños de imagen que WooCommerce usa siguiendo estos pasos:

  • Inicia sesión en WordPress
  • Navega a WooCommerce -> Pestaña Productos -> Mostrar (Subpestaña)
  • Hacia la parte inferior puedes establecer los tamaños de imagen para:
    • Imágenes de catálogo
    • Imagen de producto único
    • Miniaturas de producto
  • Finalmente, puedes instalar Regenerar miniaturas para obtener los tamaños cambiados.

Otro método es tener estos tamaños al instalar:

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
    );

    // Tamaños de imagen
    update_option( 'shop_catalog_image_size', $catalog );       // Miniaturas de categoría de producto
    update_option( 'shop_single_image_size', $single );         // Imagen de producto único
    update_option( 'shop_thumbnail_image_size', $thumbnail );   // Miniaturas de galería de imágenes
}

add_action( 'after_switch_theme', 'yourtheme_woocommerce_image_dimensions', 1 );

Enlaces de referencia de WooCommerce:

5 may 2015 19:58:00
Comentarios

Gracias. Ya intenté todo eso. Pero al parecer la única solución es llegar a un compromiso. Eso significa un tamaño para imágenes relacionadas y del catálogo. Solo me preguntaba si había una manera fácil de agregar una cuarta dimensión de imagen. Saludos, Theo

timholz timholz
5 may 2015 20:04:54

@theo - Lamentablemente, no que yo sepa. Teóricamente, podrías sobrescribir la Plantilla de WooCommerce con tu propia plantilla, crear tu propio WP_Query y generar el mismo loop pero llamando a tu imagen personalizada de esa manera. Podría haber otra forma que nunca he probado, pero editaré mi pregunta con ella y tal vez tengas suerte.

Howdy_McGee Howdy_McGee
5 may 2015 20:19:24

Muchas gracias por eso. Lo intentaré y te aviso.

timholz timholz
5 may 2015 21:28:05

Ok, lo intenté y fallé. Supongo que tendré que conformarme con esta limitación. Pero gracias por todas las pistas.

timholz timholz
6 may 2015 21:06:08

@timholz No tengo una instalación activa de woocommerce para experimentar con esto. Cuando tenga la oportunidad lo probaré y veré qué se me ocurre. Si descubro algo te etiquetaré y te lo haré saber o si encuentras una mejor solución ¡publícala aquí! ¡Buena suerte!

Howdy_McGee Howdy_McGee
6 may 2015 21:07:30

Hola Howdy Mc Gee, gracias por tu respuesta. Por ahora asigné la dimensión más grande para las imágenes relacionadas y del catálogo. Se ve bien, pero pierde un poco de velocidad, ya que las imágenes del catálogo tienen que escalarse. Pero de todos modos, gracias por tu atención. :)theo

timholz timholz
7 may 2015 11:22:12

@timholz Encontré una solución que he modificado en mi respuesta y he añadido la solución al principio. Tomé la teoría original y la probé, debería funcionar para productos relacionados y probablemente podrías hacer que funcione para otros productos también. Si te funcionó, no olvides hacer clic en la marca de verificación para mostrar a los futuros lectores que te funcionó.

Howdy_McGee Howdy_McGee
7 may 2015 17:38:42

– Gracias por tu esfuerzo. Ahora es demasiado tarde. Pero mañana probaré el código y reportaré.

timholz timholz
8 may 2015 22:05:40

Hola Howdy McGee – no pude esperar hasta mañana. Tu código funciona genial. Es la condición la que hace la magia. Muchas gracias por tu tiempo y esfuerzo. El sitio en el que estoy trabajando está en modo de desarrollo, pero tan pronto como esté listo te enviaré un enlace. (por si estás interesado). Muchas gracias. Saludos, Theo PD: Intenté votar positivamente tu respuesta, pero lamentablemente mi reputación es insuficiente. Así que te voto positivamente aquí. Respuesta de primer nivel.

timholz timholz
8 may 2015 23:14:56

@timholz ¡Me alegra que te haya funcionado! Por favor, asegúrate de hacer clic en la marca de verificación para que los futuros lectores sepan que esto respondió a tu pregunta (los comentarios se ocultan después de un tiempo). También te sugiero que revises cualquier otra pregunta que hayas hecho en el pasado y hagas lo mismo (incluso si ya las respondiste). ¡Es una forma genial y fácil de ganar reputación y mostrar tu agradecimiento!

Howdy_McGee Howdy_McGee
8 may 2015 23:18:03

este es el enlace: www.j-m-t.ch Ahora tengo los tamaños de imagen apropiados para los productos del catálogo y relacionados. gracias

timholz timholz
9 may 2015 13:08:07

hay algo que noté. Los productos destacados (cuando el diseño está configurado a ancho completo) están tomando el tamaño del catálogo y, por lo tanto, se ven borrosos. Intenté adaptar el mismo método para esta clase, pero aparentemente se tratan de manera diferente.

timholz timholz
11 may 2015 12:04:58
Mostrar los 7 comentarios restantes
0

Creo que es un problema de CSS porque WooCommerce (molestamente) usa width: 100% cuando (en mi opinión) debería ser max-width: 100%. Intenta sobrescribir el ancho usando width: auto, eso debería ayudar.

5 may 2015 19:48:11