WordPressでゴミ箱に入れた投稿などが自動削除されないようにする方法(コードと検証結果)

公開日:2023(令和5)年2月24日/最終更新日:

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています

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

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

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

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

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

コードを使用する前に、ここをクリックして注意事項をご確認ください

本ページで掲載しているコードは、以下に了承した上で使用ください

  • コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
  • コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
  • コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
  • コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
  • 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
  • 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)

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

措置としては、有効化しているテーマの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になっているのが原因でした。

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

, , ,
Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Customize Ideas | Personal WP Customization Notes (PWCN)
functions.phpからセキュリティヘッダーを追加する方法(例)