WordPressのメディアライブラリから未使用の画像を削除する方法
公開: 2019-10-15あなたのウェブサイトがしばらくの間運営されているとき、もはや必要ではないがまだ存在しているものがあるのは普通です。 最も厄介な例の1つは、使用されなくなったがWordPressのスペースを占有し続ける画像の例です。
投稿やページ、または廃止された他の種類のコンテンツで使用しなくなったこれらの画像は、サーバーでホストされたままになり、リソースとストレージスペースを浪費します。 それらを使用して実行できる最善のことは、それらを再度使用しない場合はそれらを削除することです。 しかし、どうすればそれらを見つけて、どこにも使用されていないことを確認できますか? 見てみようよ…
始める前に
使用されなくなった画像をWordPressから削除する場合に最初に行うことは、 wp-contentフォルダー内のメディアファイルを含むWebサイトのバックアップコピーを作成することです。
メディアライブラリにアップロードする画像はwp-content/uploads/に保存されますが、プラグインを使用してファイルをアップロードすると、別のフォルダーに保存される可能性があります。 したがって、WordPressデータベースのバックアップコピーと、 wp-content/uploadsだけでなく、 wp-contentフォルダー内のすべてのファイルがあることを確認してください。
バックアップを作成したら、次の手順に進むことができます…
WordPressで孤立した画像を検出する
WordPressWebサイト内のコンテンツで使用されなくなった画像を検出する方法はいくつかあります。 最も効果的なのは、WordPressデータベースでそれらを検索することです。
このため、WordPressメディアライブラリにアップロードした画像が、投稿またはページであるかのようにテーブルwp_postsに保存されていることを知っておく必要があります。 このテーブルに格納されている他のコンテンツとの違いは、 post_type列に添付ファイルの値があることです。
ちなみに、重要な注意:データベースについての知識がない場合は、これから行うことに注意し、データベースのバックアップを保持し、このWordPressCodexの記事ですべてを説明していることを確認することをお勧めします。もっと詳しく。
どこにいたんだっけ? そうそう、WordPressで使用されていないすべての画像を見つけたいと思っています。 これは定義するよりも定義するのが簡単ですが、心配しないでください。段階的かつ簡単な方法で説明しようとします。
私たちがしなければならないのは、WordPressMySQLデータベースで実行するSQL言語でクエリを書くことだけです。 ウェブサイトデータベースにアクセスする方法がわからない場合は、ホスティングプロバイダーに連絡してアクセス方法を確認してください。 彼らがあなたにphpMyAdminへのアクセスを与えるなら、それもOKです
実行する必要のあるクエリは次のとおりです。
分解してみましょう。
最初に行うことは、特定のテーブルのすべての特定の行を選択するためのSELECTステートメントから始めることです。 2行目の星は、各行に「すべての列」が必要であることを意味します。
3行目と4行目は、関心のあるテーブルを示しています。この場合、前述したように、 wp_postsに保存されているWordPress添付ファイルを選択するので、これを使用します。
5行目以降、 WHEREステートメントでは、必要な行をフィルタリングして残りを除外する条件を追加できます。 6行目と14行目の間の各条件は、 AND命令で区切られています。これは、すべての条件を一度に満たす必要があることを示します。 行がすべてのWHERE条件を満たさない場合、 SELECTクエリの出力には返されません。
6行目の最初の条件は、 post_type列の値がattachmentである行のみを取得することを定義しています。 前に述べたように、投稿とページは、他のコンテンツの中でも特にwp_postsテーブルに保存されます。 この条件では、画像のみを取得します。
添付ファイルごとに、WordPressは、 post_parent列を使用してページまたは投稿のコンテキスト内でアップロードされたかどうかを保存します。 したがって、8行目の条件では、 post_parentが存在しない(つまり、どのページまたは投稿にもバインドされていない)添付ファイルのみを取得します。

一方、投稿またはページの注目画像として画像を選択した場合、WordPressはテーブルwp_postmetaにキー_thumbnail_idを使用してメタデータ行を作成し、値として添付画像の識別子を設定します。 クエリの10行目で、キー_thumbnail_idのwp_postmetaの行の値として識別子が表示されない画像を取得します。
12行目は、投稿またはページのコンテンツにURLが表示されない画像をフィルタリングするための条件を定義しています。 つまり、画像のURLがコンテンツ内に表示されている場合、その画像は引き続き有用であると見なされるため、削除しないでください。 画像のURLがwp_postsテーブルのguid列に表示されることに注意してください。
最後に、画像のURLをwp_postmetaテーブルの行内に配置するプラグインを使用した可能性があります。 14行目の条件により、この特定のケースを検出できます。
以上です! このSQLクエリを実行すると、サイトのどこでも使用されていないとされるすべての画像が返されます。
孤立した画像を探す場合、誤検知が発生する可能性があることに注意してください。 つまり、未使用としてフラグが付けられているが、実際にはWordPressで使用されている画像です。 これは、独自のテーブルを定義し、そこに画像への参照を保持するプラグインを使用できるためです。 これがあなたのケースである場合、これらのケースをカバーするために追加の条件を追加することによってクエリを適応させる必要があります。
WordPressで孤立した画像を削除する
WordPressで使用されていない可能性のある画像ができたので、結果を見て、リストしたすべての画像が使用されているかどうかを確認する必要があります。 見つけたものに応じて、前に述べたように条件を追加することでクエリを絞り込むことができます。 すべてが正しいと思われる場合は、先に進むことができます。
WordPressで添付ファイルを削除するために、ここで説明されている関数wp_delete_attachmentがあります。 ドキュメントを見ると、この関数が添付ファイルIDと、削除を強制するか、単に破棄するかを示すブールパラメーターを取得していることがわかります。
WordPressでこの関数を呼び出すと、添付ファイルとそれに関連するすべての情報が削除されます。これには、考えられるコメント、分類法での表示、関連するメタデータ、そして最も重要なことに、 wp-contentフォルダーに保存されている画像ファイルが含まれます。
PHPで使用するwp_delete_attachment命令のリストを取得するには、前のクエリの2行目を変更して、 SELECTクエリが返す文字列が目的の命令を構成する文字列になるようにする必要があります。 クエリによって返される行ごとに1つ。 ここで結果を見ることができます:

これらの手順をすべてコピーして、たとえばテーマのfunctions.phpファイルに貼り付けて、Webサイトにアクセスするだけです。 これにより、これらの命令が実行され、WordPressから孤立した画像が削除されます。 その後、以前に貼り付けた指示は不要になるため、削除します。
あなたのウェブサイトがまだ完全に機能していること、そしてあなたが関連する画像を削除していないことを確認することを忘れないでください。 問題が発生した場合でも、心配する必要はありません。データベースとwp-contentフォルダーのバックアップを作成して、Webサイトを以前の状態に復元できるようにする必要があります。
SQLとデータベースに問題がある場合、またはここで説明した内容がまったくわからない場合は、まず下にコメントを書き込んでお知らせください。 その後、MediaCleanerなどのプラグインを使用してみてください。 最終的に得られる結果は、この投稿で見たものと非常に似ている必要があります。
UnsplashのGaryChanによる注目の画像。
