web-dev-qa-db-ja.com

生成されたサムネイルのカスタム名を設定

自動生成されたサムネイルの命名規則を設定するために利用できるフィルタはありますか?

このようなもの:

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

答えが いいえ ...であることをSeems.

私はコア機能を追跡し、行き止まりを見つけました。そしてこの記事を見つけました( add_image_size()を上から切り取るにはどうすればいいですか? )ここで Rarst は言います:

中間画像生成は非常に厳格です。 Image_resize()はそれをコードの近くに保ち、完全にフックを欠いています。

しかし 、他の答え( bradt から)と彼が発表したコード( WordPressの/ - Image Crop Position )のリードに従って、私はそれを得たと思います:)

bt_generate_attachment_metadata関数で、最後のパラメータbt_image_make_intermediate_sizeを含む$sizeへの呼び出しを変更しました

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

そして関数bt_image_make_intermediate_sizeの始めを以下のように修正しました:

  • 関数に$sizeパラメータを追加しました
  • $suffixへのデフォルトのnull値の代わりに、新しい接尾辞へのswitch
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 );

ここ 、参照用に、私のmodを含む完全なコードのコピー。
そして、 と元の の差。

たぶん、すべてのコードは裸の骨に縮小することができます、しかしこの方法で私たちはカスタムトリミングされた画像の利益を得ます:))

4
brasofilo

image_make_intermediate_size というフィルタを使用することもできますが、取得した$ filenameに従って中間ファイルの名前を変更する必要があります。すでに生成されています)。

私は「サムネイル」のための中間サイズの画像を生成するだけなので、それはこれと同じくらい簡単です:

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