wake-up-neo.net

Legen Sie einen benutzerdefinierten Namen für generierte Miniaturansichten fest

Gibt es einen Filter, mit dem die Namenskonvention für diese automatisch generierten Miniaturansichten festgelegt werden kann?

Etwas wie das:

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

Scheint dass die Antwort ist nein ...

Ich habe die Kernfunktionen verfolgt und eine Sackgasse gefunden. Und fand diesen Beitrag ( Wie kann ich add_image_size () Ernte von oben machen? ) wo Rarst sagt:

Die Zwischenbilderzeugung ist extrem starr. Image_resize () hält es in der Nähe von Code und es fehlen vollständig Hooks.

Aber , nach dem Hinweis der anderen Antwort (von bradt ) und dem Code, den er veröffentlicht hat ( Position des Bildausschnitts in WordPress ), glaube ich, dass ich es verstanden habe :)

In der Funktion bt_generate_attachment_metadata habe ich gerade den Aufruf von bt_image_make_intermediate_size geändert, einschließlich des letzten Parameters $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_size wie folgt:

  • hat der Funktion den Parameter $size hinzugefügt
  • anstelle des Standardwerts für null für $suffix wird eine switch für unsere neuen Suffixe verwendet
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 .

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

4
brasofilo

Sie könnten den Filter image_make_intermediate_size verwenden, aber Sie müssten herausfinden, in welchen Namen Sie die Zwischendatei ändern möchten, je nachdem, welchen Dateinamen Sie erhalten (und dann die Datei umbenennen, da sie zu diesem Zeitpunkt bereits den Namen hat erzeugt worden).

Ich erstelle nur ein Zwischenbild für das "Vorschaubild", so einfach ist das:

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
Víctor