アップロードディレクトリから未使用の画像をすべて削除するにはどうすればよいですか?


20

アップロードフォルダーがサーバー上のスペースを占有し始めているため、アップロードフォルダーを削除しようとしています。

私はDNUIやCleanup Imagesなどのプラグインを使用してこの目的を達成しようとしましたが、これらのプラグインは機能しないか、DNUIの場合(最近更新されて機能します)が正確な結果を達成できません。これは、私のサイトがヘッダーやフッター、ギャラリーなどの投稿やページだけでなく、他の場所で画像を使用するWoocommerceとテーマを使用しているためです。WCは、Pretty Photoと呼ばれる独自のビルトインLightboxプラグインを使用しているように見えます。これは、DNUIによって「未使用」として詳細に表示される画像の呼び出し元です。

私はそれがちょっとした質問であることを知っていますが、誰かが私を正しい方向に向けることができるかどうか疑問に思っていますか?私は開発者ではないので、おそらくここに投稿するべきではありませんが、時間と決意を持って問題を解決できます。このサイトで、DNUIプラグインと同じ結果を達成するスクリプトを見てきましたが、他の画像の使用を考慮に入れたものはありません(可能であれば)。どんな助けでも大歓迎です。


2
同じことをしたかったのですが、心配なのは、未使用を定義する方法です。たとえば、作成者が画像を下書き投稿にアップロードしてから、別の下書き投稿を作成し、コンテンツを貼り付けて、その投稿を公開したとします。これは、公開された投稿ではなく、下書き投稿に画像が割り当てられることを意味します。おそらく、すべての投稿を調べて画像URLをチェックし、使用されている画像と使用されていない画像を確認するスクリプトです。うまくいけば良い答えがあります。
クリスティーンクーパー

残念ながら、「未使用」の定義が複雑になるほど、適切なソリューションが見つかる可能性は低くなります。何枚の画像(数とサイズ)について話していますか?
ラスト14年

こんにちはRarst、答えてくれてありがとう、このサイトは現在約5年間アクティブで、非常にイメージに依存しており、テーマとプラグインのかなりの数の変更があります。文字通り何千もの未使用の画像があると思います。そして、変化の量のために、サイズは大きく異なります。Force Regenerate Thumbnailsを使用してこの数を減らしてみましたが、これはある程度機能しましたが、このプラグインはその量のためにタイムアウトすることがよくあります。また、サーバーのCPUをアクティブのままにしておくと、サーバーのCPUが実行不可能なレベルになります。
G-オリー

私は問題の複雑さを理解しているので、メディアライブラリを使用してこれらの画像を特定して削除しようとしました。残念ながら、使用されていないリストが使用されることもあり、逆もまた同様であることがわかりました。
Gオリー14年

1
ある種のウェブサイトでは、2セントを入れることができれば、問題は経験的に解決できると思います。これらのサイトでは、ウェブクローラーがサイトのすべてのページにアクセスしています。サーバーログから、アクセスしたすべてのページのURLのリストを取得します。DOMDocumentを使用してこれらのページを解析し、すべての<img>要素とそのsrcを取得します。このアプローチの問題は、Javascriptがhrefとsrcを動的に生成する場合です。

回答:


4

プラグインを使用して画像を削除する:

このプラグインを使用できます。データベースを検索し、画像が投稿に挿入されているかどうかを確認します(コンテンツ、注目画像、カスタムフィールド、どこでも...)、または背景として...

画像がどこでも使用されていない場合、削除するオプションが表示されます。サイトで使用されなくなったすべての画像のリストが表示されるため、安全に削除できます。

https://wordpress.org/plugins/dnui-delete-not-used-image-wordpress/

そして、これはまだ動作します、それは時代遅れです

https://wordpress.org/plugins/wordpress-uploaded-files-cleaner/


手動で画像を削除する:

投稿やページに添付されていない画像をメディアライブラリで検索することもできます。

メディアライブラリに移動し、「添付されていない」をクリックすると、サイトの他の部分に表示されるか、使用されていないすべての画像が表示されます。


1
投稿に添付されていない画像の問題は、他の場所で使用される可能性があることです-たとえば、Wordpressのネイティブメディアアップローダーに基づく画像アップローダーを使用するカスタムフィールドがある場合コード化されているため、そこにアップロードされた画像は(データベース上の)投稿に添付されません。まだ有効なアイデア。
ブルーノモンテイロ

ここで@BrunoMonteiroを2回目にします。投稿に添付されていない画像を持つことは完全に可能です。
BODA82

3

Cron / ScheduledタスクとDBクロールはあなたの友達です

それはプラグインである必要があり、上記で提案されたものとあまり違いはありませんが、「post_content」のようなフィールドのチェックを追加して、wp_cron間隔を割り当てることができます(WP環境に応じてこれらを識別する必要があります)画像のURI / URL用。これには、システムのプロセスに非常に時間がかかる/負担がかかる可能性があります-現実的には、このプロセスは1日1回または週1回実行するだけで済みます-より頻繁に実行する他の法的/ビジネス上の理由がないと仮定します。

ソースのマスタースレーブDB構成により、このプロセスのパフォーマンスが大幅に低下することはありませんが、それはこの質問の範囲を超えていると思います。



1

wp-content/uploadsアップロードされたファイルをフォルダーでスキャンし、それらのファイルへの参照をデータベースでスキャンし、最終的にそれらを一致させる必要があります。一致しないものは削除しても安全です。

データベースのスキャンは難しい部分です。ほとんどのファイル参照は、標準のWordPress機能/ APIを使用してアクセスできるメディアライブラリ内に保存されます。しかし、メディアライブラリから削除されたが、投稿によってまだ参照されているファイルはどうなりますか?または、他のプラグインがさまざまな方法でリンクするファイルですか?

私はかなりの数のテストを行い、収集したものから、すべてのファイル参照はプレーンテキスト形式(つまり、ファイルパスまたはURLに等しいテーブルセル)、HTML形式(つまり、投稿のコンテンツ)、シリアル化されたデータとして、または最後にJSONオブジェクトとして。データベース全体をスキャンして、各セル内で使用されている形式を推測する必要があります。もちろん、一部のプラグインがファイルへの参照を保持するために使用している他のエキゾチックな方法があるかもしれませんが、それらはケースバイケースでしか処理できません。

その結果、クライアントのウェブサイトのいくつかに必要なため、すべてを自動的に実行するプラグインを作成し、Theia Upload Cleanerという名前を付けました。私にとってはうまくいきましたが、もちろん、このようなことを試みる前に、常にバックアップを作成する必要があります。


素敵なアプローチ...時間の経過とともに追加されるコンテンツ/プラグイン/投稿で問題が発生するかどうか疑問に思います...
jj_

はい、あちこちに問題があります。たとえば、一部のプラグインでは、特定のテーブルを除外する必要があります。そうしないと、大幅に速度が低下する可能性があります。「ログ」テーブルなどの特定のキーワードで自動的に除外しようとしますが、もちろんすべてのケースをキャッチするわけではありません。
liviucmg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.