Legen Sie einen benutzerdefinierten Namen für generierte Miniaturansichten fest

9

Gibt es einen Filter zum Festlegen der Namenskonvention für diese automatisch generierten Miniaturansichten?

Etwas wie das:

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

Antworten:

4

Scheint, dass die Antwort nein ist ...

Ich bin den Kernfunktionen gefolgt und habe eine Sackgasse gefunden. Und habe diesen Beitrag gefunden ( Wie kann ich add_image_size () von oben beschneiden? ), In dem Rarst sagt:

Die Zwischenbilderzeugung ist extrem starr. Image_resize () hält es nahe am Code und es fehlen vollständig Hooks.

Aber nach dem Beispiel der anderen Antwort (von Bradt ) und dem Code, den er veröffentlicht hat ( Image Crop Position in WordPress ), denke ich, dass ich es verstanden habe :)

In der Funktion bt_generate_attachment_metadatahabe ich den Aufruf so geändert, dass er bt_image_make_intermediate_sizeden letzten Parameter enthält$size

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

Und änderte den Anfang der Funktion bt_image_make_intermediate_sizewie folgt:

  • fügte den $sizeParameter der Funktion hinzu
  • Anstelle des Standardwerts nullfür $suffixa switchfür unsere neuen Suffixe
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 );

Hier eine Kopie des vollständigen Codes mit meinen Mods, nur als Referenz.
Und der Unterschied zum Original .

Sehr wahrscheinlich kann der gesamte Code auf den Punkt gebracht werden, aber auf diese Weise erhalten wir den Vorteil von benutzerdefinierten zugeschnittenen Bildern :))

brasofilo
quelle
1
Entschuldigung, immer noch auf Reisen. Ich werde es bald testen und dich wissen lassen. Vielen Dank.
Sean Lee
Ist diese Antwort noch gültig? Es ist ein paar Jahre her, also ...
Athoxx
2

Sie könnten den Filter image_make_intermediate_size verwenden , aber Sie müssten herausfinden, in welchen Namen Sie die Zwischendatei entsprechend dem erhaltenen $ filename ändern möchten (und die Datei dann umbenennen, da sie zu diesem Zeitpunkt bereits generiert wurde).

Ich generiere nur ein Bild mittlerer Größe für das "Miniaturbild", daher ist es so einfach:

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;
} );
Sieger
quelle
1
Regex könnte weniger spezifisch sein"/(.*)-\d+x\d+\.(.*)/i"
benoît