Generar miniaturas solo para imágenes destacadas


9

Me gustaría saber si hay una manera simple (código personalizado o complemento) para crear tamaños de miniatura solo para las imágenes que pretendo usar como imágenes destacadas (index.php, archive.php, etc.), pero no para las imágenes utilizado en las publicaciones (single.php). Mi objetivo principal es reducir el uso del espacio del servidor al no crear miniaturas que mi tema nunca usará.

Mis miniaturas solo tendrían dos tamaños, 720px de ancho y 328px de ancho, y las imágenes destacadas de 720px de ancho (solo en la página de inicio) también tendrían una de 328px de ancho (para archive.php y sidebar.php)

Actualmente, la única forma programática que conozco es generar miniaturas para cada carga de imágenes , lo cual no es deseable, ya que la mayoría de mis cargas serán imágenes publicadas y tendría que eliminar muchas imágenes del servidor manualmente.

Preferiría código personalizado sobre complementos, pero un complemento sería aceptable. Sé que hay algunos complementos de cambio de tamaño de imagen, pero no se han actualizado en mucho tiempo (TimThumb, Dynamic Image Resizer ).

También he encontrado una pregunta similar aquí en Wordpress SE, pero la respuesta aceptada realmente no resuelve mi problema.


EDITAR: necesito eliminar o evitar miniaturas para las imágenes dentro de la publicación, no para las imágenes destacadas, es decir:

(1) Imagen destacada : las miniaturas adicionales generadas automáticamente por WP están bien.

(2) Imágenes utilizadas dentro de las publicaciones : cargue la imagen original y no genere ningún tamaño adicional. Recortaré, redimensionaré y optimizaré la imagen antes de subirla y un tamaño se ajustará a mis necesidades.



1
En primer lugar, dice posible duplicado ; en segundo lugar, podría ayudarlo a resolver su problema, ya que posiblemente pueda adaptarlo a sus necesidades; Por último, pero no menos importante, hay una respuesta para el complemento »Dynamic Image Resizer«, aunque es diferente.
Nicolai

2
No hay tiempo para sumergirse en él, pero lo que usted sabe es la identificación de la miniatura - meta clave: _thumbnail_id-, que debería ser suficiente en realidad, save_posty ganchos similares podrían ser un camino a seguir. Pero no olvide que esas imágenes en su publicación podrían usarse en otras publicaciones como miniaturas, es posible que desee tener un mecanismo para dar cuenta de eso.
Nicolai

1
Teniendo en cuenta lo que escribió, no le importan los tamaños adicionales para la imagen destacada, pensé más: si sabe cuál de las imágenes adjuntas es la miniatura de la publicación / imagen destacada, puede eliminar los tamaños de imagen adicionales para las demás , al excluir la imagen destacada de ese proceso. Mencioné una posible restricción / inconveniente antes.
Nicolai

1
Sugerencia: desactive el cambio de tamaño por completo add_filter('intermediate_image_sizes_advanced', '__return_false')y luego
cambie el

Respuestas:


2

Esta función generará una imagen al registrar temporalmente un tamaño de imagen, generar la imagen (si es necesario) y eliminar el tamaño para que no se creen nuevas imágenes en ese tamaño.

function lazy_image_size($image_id, $width, $height, $crop) {
    // Temporarily create an image size
    $size_id = 'lazy_' . $width . 'x' .$height . '_' . ((string) $crop);
    add_image_size($size_id, $width, $height, $crop);

    // Get the attachment data
    $meta = wp_get_attachment_metadata($image_id);

    // If the size does not exist
    if(!isset($meta['sizes'][$size_id])) {
        require_once(ABSPATH . 'wp-admin/includes/image.php');

        $file = get_attached_file($image_id);
        $new_meta = wp_generate_attachment_metadata($image_id, $file);

        // Merge the sizes so we don't lose already generated sizes
        $new_meta['sizes'] = array_merge($meta['sizes'], $new_meta['sizes']);

        // Update the meta data
        wp_update_attachment_metadata($image_id, $new_meta);
    }

    // Fetch the sized image
    $sized = wp_get_attachment_image_src($image_id, $size_id);

    // Remove the image size so new images won't be created in this size automatically
    remove_image_size($size_id);
    return $sized;
}

Es "vago" porque las imágenes no se generan hasta que se necesitan.

En su caso de uso, lo llamaría lazy_image_sizecon la ID de miniatura de la publicación para obtener una imagen del tamaño deseado. Se generaría una imagen en la primera llamada. Las llamadas posteriores buscarían la imagen existente.

Gist: https://gist.github.com/mtinsley/be503d90724be73cdda4


0

Puedes ver este enlace . hay algún ejemplo como

add_action( 'after_setup_theme', 'baw_theme_setup' );
function baw_theme_setup() {
  add_image_size( 'category-thumb', 300 ); // 300 pixels wide (and unlimited height)
  add_image_size( 'homepage-thumb', 220, 180, true ); // (cropped)
}

2
Necesito miniaturas solo para ciertas imágenes, no para todo lo que subo. Básicamente, cuando subo una imagen que quiero controlar si se crean miniaturas o no.
imrek

¿pero por qué? ¿El espacio de almacenamiento es un problema? Es realmente difícil de imaginar cuando hay tanto espacio de almacenamiento disponible.
aequalsb

0

1.Vaya al Tablero> Configuración> Medios
2. Desmarque Recortar miniatura a dimensiones exactas (normalmente las miniaturas son proporcionales) 3. Ingrese
0 para todas las entradas (0 para todos los tamaños)
4. Agregue estos a sus funciones.php

// Enable support for Post Thumbnails, and declare sizes.
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 400, 400, array("center","center") );
function fw_add_image_insert_override($sizes){
    // unset( $sizes['thumbnail']);
    unset( $sizes['small']);
    unset( $sizes['medium']);
    unset( $sizes['large']);
    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'fw_add_image_insert_override' );

5. Asegúrese de que no haya una línea de código en sus funciones.php comience con add_imge_size Nota: Supongo que usa un tamaño de 400x400 para su miniatura. Ahora, cuando cargue una foto, creará solo 2 versiones en lugar de al menos 4 versiones de fotos. como previamente.


0

Hola, tuve un problema similar. Woocommerce utiliza imágenes de catálogo para imágenes de catálogo y productos relacionados. Eso no es lo ideal, ya que pierde calidad de imagen o velocidad. Así que intenté agregar una cuarta categoría de imagen para mis productos relacionados. Howdy McGee ha resuelto el problema. Por favor, eche un vistazo a la respuesta de Howdy McGees:

Modificar tamaños de imagen de producto relacionados: ¡ lea su código !

Ha funcionado magníficamente para mis necesidades. Para su problema, podría aplicarse la misma lógica. Espero que esto ayude. saludos - theo

Encontré una solución que funciona. 1.paso: asigna un nuevo tamaño de miniatura en tus functions.php. Consultar referencia: wp codex !

/*add your custom size*/
add_action( 'after_setup_theme', 'your_theme_setup' );
function your_theme_setup() {
add_image_size( 'your-thumb', 123, 123, true );//insert your values
}

Nota: 'su pulgar', usará este nombre de variable más tarde

  1. paso: a continuación, agregue el siguiente código donde desee mostrar sus productos destacados:

    <h1>featured products</h1> 
    <div class="woocommerce">
    <ul class= "products">
    
    <?php
    $args = array( 'post_type' => 'product', 'meta_key' => '_featured','posts_per_page' => 4,'columns' => '4', 'meta_value' => 'yes' );
     $loop = new WP_Query( $args );
    
     while ( $loop->have_posts() ) : $loop->the_post(); global $product; ?>
    
                    <li class="product post-<?php echo get_the_ID(); ?>">    
                        <a href="<?php echo get_permalink( $loop->post->ID ) ?>" title="<?php echo esc_attr($loop->post->post_title ? $loop->post->post_title : $loop->post->ID); ?>">
    
                            <?php woocommerce_show_product_sale_flash( $post, $product ); ?>
                            <?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
                            <h3><?php the_title(); ?></h3><span class="price"><?php echo $product->get_price_html(); ?></span>
    
                    </li>
    
    <?php endwhile; ?>
    <?php wp_reset_query(); ?> 
    </ul>
    </div>
    

Referencia e información: no hay suficiente reputación para un tercer enlace, lo siento (www.haloseeker.com/display-woocommerce-featured-products-without-a-shortcode/) Lo coloqué en el index.php (mi página de inicio) de wootheme mystile . No olvide usar 'su pulgar' en línea:

<?php if (has_post_thumbnail( $loop->post->ID )) echo get_the_post_thumbnail($loop->post->ID, 'your-thumb'); else echo '<img src="'.woocommerce_placeholder_img_src().'" alt="Placeholder" width="123px" height="123px" />'; ?></a>
  1. paso: regenerar miniaturas, use el complemento https://wordpress.org/plugins/regenerate-thumbnails/

  2. actualizar el navegador e inspeccionar el dom y comparar los valores

Según su tema, puede cambiar el marcado y los nombres de clase. Testifico el método anterior y funciona bien. Lo único que no pude hacer hasta ahora es agregar el botón agregar al carrito, ya que no sé cómo escribir una variable en el código abreviado del botón agregar al carrito. Este es el código:

<?php echo do_shortcode('[add_to_cart id="variable number?"]'); ?>

Espero que esto ayude. Ciertamente hay una forma más elegante de hacer esto. Por ejemplo con una función en functions.php

saludos theo


0

Para evitar que WordPress haga los tamaños adicionales solo para ciertas imágenes, debe tener una manera de indicar que una imagen que ESTÁ A punto de cargar se usará solo para un propósito particular. Esto debe suceder ANTES de que lo haya subido.

dado que no existe dicha interfaz (lista para usar) para indicar tales opciones durante una acción de carga, no puede evitar la generación de imágenes adicionales, a menos que haya un complemento que agregue esta función.

pero ¿por qué no querrías los tamaños de imagen adicionales? nunca se sabe cuándo puede encontrarse con una situación en la que desea utilizar un tamaño diferente de cualquier imagen. ¿le preocupa el espacio de almacenamiento?

¿no puedes usar tus propias especificaciones de tamaño específico como esta? the_post_thumbnail( array(100, 100) );

La mayoría de las respuestas y comentarios que he leído aquí explican cómo personalizar el entorno de WordPress para tamaños de imagen, pero ninguno menciona hacerlo condicionalmente. Además, ninguno de ellos aborda el hecho de que debe ser capaz de indicar el uso de una imagen antes de cargarla.

Si está tratando de compensar una imagen demasiado pequeña o demasiado grande en una publicación, puede utilizar algunas cosas.

  1. CSS: puede agregar entradas a su hoja de estilo, por ejemplo .post-entry img { max-width:200px; max-height:300px; }, esto es más universal y efectivo que depender del tamaño de la imagen en sí, eso es MUCHO tiempo de photoshop.

  2. Plantilla: puede modificar el archivo de plantilla donde se genera la salida HTML de publicaciones y especificar un tamaño de imagen como este:

vea esta documentación en WordPress: https://codex.wordpress.org/Function_Reference/the_post_thumbnail

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.