web-dev-qa-db-ja.com

ファイル名の幅でアップロード画像の名前を変更する

アップロードしたファイルの名前を変更するためにWordPressが使用する名前フォーマットを変更しようとしています。例えば、私がcat-picture.jpgというファイル名で画像をアップロードすると、WordPressは拡大縮小版を作成し、ファイル名をcat-picture-{WIDTHxHEIGHT}.jpgのバリエーションに変更します。このwidth&height属性をファイル名の先頭に移動する方法はありますか?その代わりに{WIDTHxHEIGHT}-cat-picture.jpgのバリエーションを入手できますか?したがって、この例では、ファイル名を600x400-cat-picture.jpgに変更します。考えですか?

私は この記事 そして この記事 を見ました、しかし私は実用的な解決策を思い付くことができません。これが私のコードです:

add_filter( 'wp_handle_upload_prefilter', 'modify_uploaded_file_names', 20);
function modify_uploaded_file_names( $image ) {
    // Get default name of uploaded file and set to variable
    $imagename = $image['name'];
    // Case switch for multiple file extensions
    switch ( $image['type'] ) {
        case 'image/jpeg' :
            $suffix = 'jpg';
            break;
        case 'image/png' :
            $suffix = 'png';
            break;
        case 'image/gif' :
            $suffix = 'gif';
            break;
    }
    // Get size of uploaded image and assign to variable
    $imagesize = getimagesize($image);
    // Re-structure uploaded image name
    $image['name'] = "{$imagesize[0]}x{$imagesize[1]}-{$imagename}.{$suffix}";

    return $image;
}
3
kaffolder

私はなんとかしてそれをフィルタ image_make_intermediate_size で行うことができました。

おそらく、すべてのpath/filename.extensionの憶えがなくて作り直されたものは、最適化されるか、または一筆書きのやり方で作られることができました、しかし残念ながら、私はそれを読者に任せます:

// The filter runs when resizing an image to make a thumbnail or intermediate size.
add_filter( 'image_make_intermediate_size', 'rename_intermediates_wpse_82193' );

function rename_intermediates_wpse_82193( $image ) 
{
    // Split the $image path into directory/extension/name
    $info = pathinfo($image);
    $dir = $info['dirname'] . '/';
    $ext = '.' . $info['extension'];
    $name = wp_basename( $image, "$ext" );

    // Build our new image name
    $name_prefix = substr( $name, 0, strrpos( $name, '-' ) );
    $size_extension = substr( $name, strrpos( $name, '-' ) + 1 );
    $new_name = $dir . $size_extension . '-' . $name_prefix . $ext;

    // Rename the intermediate size
    $did_it = rename( $image, $new_name );

    // Renaming successful, return new name
    if( $did_it )
        return $new_name;

    return $image;
}
3
brasofilo