Establecer nombre personalizado para miniaturas generadas

9

¿Hay algún filtro disponible para establecer la convención de nomenclatura de esas miniaturas generadas automáticamente?

Algo como esto:

  • thumbnail_150x150.jpg -> thumbnail-s.jpg
  • thumbnail_300x300.jpg -> thumbnail-m.jpg
  • thumbnail_600x600.jpg -> thumbnail-l.jpg
Sean Lee
fuente

Respuestas:

4

Parece que la respuesta es no ...

He seguido las funciones principales y he encontrado un callejón sin salida. Y encontré esta publicación ( ¿Cómo puedo hacer add_image_size () crop desde la parte superior? ) Donde Rarst dice:

La generación de imágenes intermedias es extremadamente rígida. Image_resize () lo mantiene cerca del código y carece completamente de ganchos.

Pero , siguiendo el ejemplo de la otra respuesta (de bradt ) y el código que publicó ( Posición de recorte de imagen en WordPress ), creo que lo entendí :)

En la función bt_generate_attachment_metadata, acabo de modificar la llamada para bt_image_make_intermediate_sizeincluir el último parámetro$size

$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );

Y modificó el comienzo de la función de la bt_image_make_intermediate_sizesiguiente manera:

  • agregó el $sizeparámetro a la función
  • en lugar del nullvalor predeterminado para $suffix, switcha nuestros nuevos sufijos
function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
    if ( $width || $height ) {
        switch($size) {
            case 'thumbnail':
                $suffix = 't';
                break;
            case 'medium':
                $suffix = 'm';
                break;
            case 'large':
                $suffix = 'l';
                break;
            default:
                $suffix = null;
                break;
        }
        $resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );

Aquí , una copia del código completo con mis modificaciones, solo como referencia.
Y la diferencia del original .

Probablemente, todo el código se puede reducir a un nivel básico, pero de esta manera obtenemos el beneficio de imágenes recortadas personalizadas :))

brasofilo
fuente
1
lo siento, sigo viajando. Lo probaré pronto y te lo haré saber. Gracias.
Sean Lee
¿Esta respuesta sigue siendo válida? Han pasado algunos años, así que ...
Athoxx
2

Podría usar el filtro image_make_intermediate_size , pero tendría que averiguar a qué nombre desea cambiar el archivo intermedio, de acuerdo con el $ nombre de archivo que obtenga (y luego renombrar el archivo, porque en este punto ya se ha generado).

Solo genero una imagen de tamaño intermedio para la "miniatura", por lo que es tan simple como esto:

add_filter( 'image_make_intermediate_size', function( $filename ) {

    // old 2017_234783843-100x100.jpg
    $old = $filename;
    // new 2017_234783843-thumbnail.jpg
    $new = preg_replace("/(\d+_\d+)-\d+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );

    rename($old, $new);

    return $new;
} );
Víctor
fuente
1
regex podría ser menos específico"/(.*)-\d+x\d+\.(.*)/i"
benoît