web-dev-qa-db-ja.com

Add_image_size()を使用したときに生成された画像(ファイル)を削除します

私はこれを使って画像サイズを追加しました:

add_image_size('property-featured', 484, 393, true);

これは昨年非常にうまく機能し、そのサイズで約1GBの画像を生成しましたが、この画像サイズはもう必要ありません。私はこのサイズで年間に作成された画像を片付けたいです。

これまでのところ、そのコード行を削除しましたが、作成されたイメージはクリーンアップされません。

これらの画像を削除するための正しい方法は何ですか?

7
Brady

私は私のためにこれを行うプラグインを見つけました: 追加の画像サイズ(zui)

画像サイズを削除すると、アップロードした新しい画像すべてに対してそのサイズが作成されるわけではありません。ただし、削除されたサイズ用に作成されたイメージは、それらのサイズ用のイメージ添付ファイルのメタデータと同様にサーバー上にまだ存在します。この機能は、それらのサイズの画像添付メタデータと同様に、それらの画像をサーバーから物理的に削除します。この機能は自己責任で使用してください。元に戻すことはできません。

更新

このプラグインは驚異的な働きをし、たくさんのクリーンアップを行いましたが、過去にWordPressから削除された画像によって残されたファイルをクリーンアップすることはできませんでした。私はこの自家製のスクリプトを使って、残った画像の一部を整理しました。

<?php
$files = find_all_files("/home/****/public_html/wp-content/uploads");
$files2 = array();

foreach($files as $key => $file) {
    if(1 == preg_match("#150x\d+\.jpg$#", $file)) {
        $files2[] = $file;
        unlink($file);
    }elseif(1 == preg_match("#300x\d+\.jpg$#", $file)) {
        $files2[] = $file;
        unlink($file);
    }elseif(1 == preg_match("#\d+\x300.jpg$#", $file)) {
        $files2[] = $file;
        unlink($file);
    }elseif(1 == preg_match("#\d+\x150.jpg$#", $file)) {
        $files2[] = $file;
        unlink($file);
    }elseif(1 == preg_match("#\d+\x1024.jpg$#", $file)) {
        $files2[] = $file;
        unlink($file);
    }
}


print_r($files2);


function find_all_files($dir) 
{ 
    $root = scandir($dir); 
    foreach($root as $value) 
    { 
        if($value === '.' || $value === '..') {continue;} 
        if(is_file("$dir/$value")) {$result[]="$dir/$value";continue;} 
        foreach(find_all_files("$dir/$value") as $value) 
        { 
            $result[]=$value; 
        } 
    } 
    return $result; 
} 
?>
9
Brady

私はサムネイルを再作成するために http://wordpress.org/extend/plugins/regenerate-thumbnails/ を使用します。再配置する画像数と画像サイズによっては、時間がかかる場合があります。

別の方法はSSH経由でこれを行い、次のようなコマンドでそれらを見つけることです。

find ./uploads/*  -iname '*-484x393.*' -ls

その後、次のようなコマンドを実行してください。

find ./uploads/*  -iname '*-484x393.*' -exec rm {} \;

このようなコマンドを実行する前に、必ずすべてをバックアップしてください。

2
Cristian