WordPressの標準では、投稿・固定ページ・カスタム投稿タイプ・コメントなど、ゴミ箱の機能があるものに関して、削除した日時から30日過ぎると自動で完全削除されるようになっています。

厳密には、削除した日から30日を超え、次にサイトへアクセスがあるなどWordPressのcron(自動処理)が走った段階で削除されます

どのバージョンでというところまでは分からなかったのですが、この機能は結構初期(恐らく日数指定が変更できるようになったのが2.9からだからそれ以前..)からあったようなのですが、「ゴミ箱に入れておいたのにいつの間にか消えてしまった」「勝手にゴミ箱の中身が削除されてた」などということをよく耳にします。

そこで今回は、ゴミ箱に入れた投稿などの自動削除を無効にする方法を紹介します・・・と言いたいところでしたが、後述する方法で実際にテストしてみたら、少なくとも私の環境では効かないことが分かりました。

本ページと同様のコードが「wordpress trash auto cleanup」などのキーワードで検索すると、結構たくさん出てきますが、それらが実際に検証されたものなのか、私の環境だけ機能しないものなのかは不明です。

ゴミ箱内のアイテムの自動削除を無効にする方法

措置としては、有効化しているテーマのfunctions.phpへ以下を追記するだけです。

/* ゴミ箱内コンテンツの自動削除を停止する */
function sample_remove_schedule_delete() {
    remove_action( 'wp_scheduled_delete', 'wp_scheduled_delete' );
}
add_action( 'init', 'sample_remove_schedule_delete' );

参考ページ:How to limit or disable automatic empty trash in WordPress

テーマを変更した場合、このコードを変更後のテーマのfunctions.phpへ追加しないと、自動削除の停止が無効になってしまいますのでご注意ください

補足 本機能が確実に機能するかのテスト

前述したように、前項で紹介したコードは、それ以上のオプションプログラムを追加する必要もないため、参考ページのものほぼまんまです。

ただ、復元させるかもしれないゴミ箱内の大切な投稿が誤って完全削除されてしまうことがないよう、このコードが確実に機能するのかを以下のようにテストをしてみました。

実際に本ページのコードを使用する際は鵜呑みにせず、同様のテストをすることをおすすめします

1.ゴミ箱内の保持日数を変更する

この措置はテーマやプラグインからは指示できませんので、WordPressの設定ファイルである、wp-config.phpへ以下のコードを記述し、ゴミ箱の保存日数を1日に変更しました。

define('EMPTY_TRASH_DAYS', 1);

これでゴミ箱に入れてから1日を経過した以降にcronが走れば、ゴミ箱は空になるはずです。

2.テーマ内にコード設置する

前述したコードをテーマのfunctions.php内へ設置しました。

1の日数指定と併せて、ゴミ箱に入れてから2日以上経過しても、ゴミ箱が空にならないという条件指定ができたはずです。

投稿・固定ページ・カスタム投稿タイプの投稿・コメントそれぞれ1件ゴミ箱内にコンテンツを移動して様子見をしました。

結果は...きちんと動作しました。問題なさそうです。

さらにこのコードを削除して、保持日数を通常通り30日に戻した状態でテストしましたが、こちらもOKでした。

設定したのにゴミ箱が空になってしまうときは

このページを参考にしてゴミ箱から投稿などが削除されないようにしたのに、ある日気づいたらやはり削除されていた..そんな時は、以下の点を確認ください。

再度書きますが、環境によって動作が違うこともないとは言えませんので、十分にテストをしてから実用化するようにしてください

  • 何等かの操作中に手動でゴミ箱を空にしてしまった(人為的なもの)
  • クリーンアップ系のプラグインで、ゴミ箱が空になるような設定をONにしていた

実は、以前にテストした時、同じように「何だ、空になっちゃうじゃん」という結果になったことがあったんです。

でもよくよく確認してみたら、いつもサイトで使用している「Optimize Database after Deleting Revisions」プラグインで、ゴミ箱を空にする設定がONになっているのが原因でした。

データを軽くするという目的や、最適化をするプラグインではよくこの設定が存在するので、注意が必要ですね。