WordPress でメディアライブラリに入っている画像やファイルは [完全に削除] しかありません。
記事や固定ページにはゴミ箱機能があり、一旦削除したものがゴミ箱に入るのに、なぜメディアライブラリにはゴミ箱機能ないのでしょう?
実はメディアライブラリにもゴミ箱機能はあるのですが、標準で OFF になっているのです。
では、ON にするとどのような動作をするのか検証してみました。
そもそも調査と検討を始めた理由
※ここは重要ではないので、読み飛ばしてもらって OK です。
WordPress のユーザーを削除すると、ユーザー所有のコンテンツもまとめて削除する機能があります。
いや、これはむしろ罠かと思う機能で、操作方法を知らないユーザーがコンテンツをまとめて削除する事故が発生したりしています。
このような悲しい事故が発生したときでも、メディアライブラリのゴミ箱機能を有効にしていれば、比較的容易に復旧できそうということが検証でわかりました。
メディアライブラリのゴミ箱有効化
wp-config.php
に設定を追加するだけです。
define( 'MEDIA_TRASH', true );
でも、わざわざ有効化にしないといけないのには理由がありそうです。
はじめは過去の互換性のために OFF にしていると思っていましたが、どうやら違いそうです。
メディアライブラリのゴミ箱はなにが罠なのか?
問題が発生する手順を簡単にまとめます。
- メディアライブラリに
test.jpg
にアップロードします。
内部的にはwp-contents/uploads/2022/03/test.jpg
にアップロードされました。 - 記事 A にメディアライブラリから
test.jpg
を貼り付けて更新します。
記事 A を Web ページとして確認し、test.jpg
が表示されていることを確認できます。 - メディアライブラリから
test.jpg
をゴミ箱に移動します。 -
test.jpg
をゴミ箱に移動したのに、相変わらず記事 A にはtest.jpg
が表示されていることを確認できます。
当然、内部的にはwp-contents/uploads/2022/03/test.jpg
はまだ存在しますので表示されています。
ただし、WordPress のメディアライブラリを管理しているデータベース内部ではtest.jpg
はゴミ箱に入っているフラグが立っています。
(wp_post
テーブルのpost_status
がTrash
に設定されます。) -
ゴミ箱に入れたメディアは 30 日経過すると自動的に削除されます。
データベース上のレコードと、実際のファイルが削除されるタイミングはここです。
(※日数はEMPTY_TRASH_DAYS
で変更できます。) - 何もしていないのに突然、記事 A から
test.jpg
が表示されなくなります。
この頃にはtest.jpg
をゴミ箱に入れたことなど忘れられているでしょう。
また、この動作はログに記録されるわけではありません。
通常、記事をゴミ箱に入れると、上記の 4. のタイミングで Web 表示されなくなります。
ただし、コンテンツの場合は内部的なパス wp-contents/uploads/2022/03/test.jpg
のファイル自体を参照するため、ゴミ箱に入れてもファイルはそのまま存在するため Web 表示されたままになってしまうのです。
ここで、記事とコンテンツのゴミ箱動作の差異が発生します。
コンテンツをゴミ箱に入れた瞬間に Web 表示されなくなれば操作した際に誤操作を思い出しやすいのですが、30日経って突然消えてしまう動作をされた場合は原因の調査のしようもありません。
自分以外の誰かが削除していたときには、更に調査は絶望的でしょう。
ですので、WordPress のメディアライブラリのゴミ箱機能は標準で OFF になっているのです。
まとめ
WordPress のメディアライブラリのゴミ箱機能は、リスクを承知の上で ON にしないと危険です。
このことに触れている記事が検索した限り見当たらなかったので、検証結果として残しておきます。