web-dev-qa-db-ja.com

元の画像を削除する - サムネイルを保存しますか?

私はたくさんのサムネイルを使っていますが、元のファイルは使いません。スペースを節約するために、オリジナルがディスクに保存されないようにしたいが、サムネイルは100pxだけにしておく。これどうやってするの?

ありがとう、デニス

7
FLX
add_filter( 'wp_generate_attachment_metadata', 'delete_fullsize_image' );
function delete_fullsize_image( $metadata )
{
    $upload_dir = wp_upload_dir();
    $full_image_path = trailingslashit( $upload_dir['basedir'] ) . $metadata['file'];
    $deleted = unlink( $full_image_path );

    return $metadata;
}
10
Cristian

私はウェブ上で他の解決策を尊重しました。それはここで受け入れられているものに基づいていますが、それはさらにそれを取ります。

ここで承認されたものはメインイメージを削除して続行します。私が見つけた解決策は、元の画像を "large"用に生成された画像で置き換えます。この画像の解像度が定義されていない場合は置き換えずに続行します。

このようにして、元の画像に依存しているすべてのスクリプトが以前と同じように機能することが保証されます。

http://www.wprecipes.com/how-to-automatically-use-resized-image-instead-of-originals

編集:

@dalbaebはブログ投稿のコメントに書かれている問題を私に指摘しました。そこで提供されているソリューションではなく、APIに基づいてコードを書き直しました。それほど大きな違いはありませんが、APIと同じ関数呼び出しを使用するだけです。

function replace_uploaded_image($image_data) {
    // if there is no large image : return
    if (!isset($image_data['sizes']['large'])) return $image_data;

    // paths to the uploaded image and the large image
    $upload_dir = wp_upload_dir();
    $uploaded_image_location = $upload_dir['basedir'] . '/' .$image_data['file'];
    $large_image_filename = $image_data['sizes']['large']['file'];

    // Do what wordpress does in image_downsize() ... just replace the filenames ;)
    $image_basename = wp_basename($uploaded_image_location);
    $large_image_location = str_replace($image_basename, $large_image_filename, $uploaded_image_location);

    // delete the uploaded image
    unlink($uploaded_image_location);

    // rename the large image
    rename($large_image_location, $uploaded_image_location);

    // update image metadata and return them
    $image_data['width'] = $image_data['sizes']['large']['width'];
    $image_data['height'] = $image_data['sizes']['large']['height'];
    unset($image_data['sizes']['large']);

    // Check if other size-configurations link to the large-file
    foreach($image_data['sizes'] as $size => $sizeData) {
        if ($sizeData['file'] === $large_image_filename)
            unset($image_data['sizes'][$size]);
    }

    return $image_data;
}
add_filter('wp_generate_attachment_metadata', 'replace_uploaded_image');

EDIT2:

別のサイズ設定がラージファイルにリンクしている、あるクライアントのコードに問題がありました。それに応じてコードを更新しました。何か問題があれば、私にメールを送ってください。

4
SimonSimCity

私は同じ問題を抱えていたので、私はちょうどプラグインを作成しました。 ここ からダウンロードできます。

1
Carlos Minatti