Imposta il nome personalizzato per le miniature generate


9

È disponibile un filtro per impostare la convenzione di denominazione di quelle miniature generate automaticamente?

Qualcosa come questo:

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

Risposte:


4

Sembra che la risposta sia no ...

Ho seguito le funzioni principali e ho trovato un vicolo cieco. E ho trovato questo post ( Come posso fare in modo che add_image_size () ritagli dall'alto? ) Dove Rarst dice:

La generazione di immagini intermedie è estremamente rigida. Image_resize () lo tiene vicino al codice e manca completamente di hook.

Ma , seguendo l'esempio dell'altra risposta (da Bradt ) e il codice che ha pubblicato ( Image Crop Position in WordPress ), penso di averlo ottenuto :)

Nella funzione bt_generate_attachment_metadata, ho appena modificato la chiamata per bt_image_make_intermediate_sizeincludere l'ultimo parametro$size

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

E modificato l'inizio della funzione bt_image_make_intermediate_sizecome segue:

  • aggiunto il $sizeparametro alla funzione
  • invece del nullvalore predefinito a $suffix, a switchai nostri nuovi suffissi
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 );

Ecco , una copia del codice completo con le mie mod, solo per riferimento.
E il diff dall'originale .

Molto probabilmente, tutto il codice può essere ridotto a un osso nudo, ma in questo modo otteniamo il vantaggio di immagini ritagliate personalizzate :))


1
scusa, sto ancora viaggiando. Lo proverò presto e ti farò sapere. Grazie.
Sean Lee,

Questa risposta è ancora valida? Sono passati alcuni anni, quindi ...
Athoxx,

2

Potresti usare il filtro image_make_intermediate_size , ma dovresti capire a quale nome vuoi cambiare il file intermedio, in base al $ nomefile che ottieni (e quindi rinominare il file, perché a questo punto è già stato generato).

Genero solo un'immagine di dimensioni intermedie per la "miniatura", quindi è semplice come questa:

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

1
regex potrebbe essere meno specifico"/(.*)-\d+x\d+\.(.*)/i"
benoît
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.