WordPressの「ゴミ箱」に入っている記事にはどういう処理がされているか

この記事は2024/12/01に作成されました。
■WordPressの「ゴミ箱」について
WordPressの「ゴミ箱」機能は、投稿やページを間違えて削除してしまった際に復元を容易にするための機能です。完全な削除がなされる前に一定期間データを保持することで、誤操作などによるデータ損失を防ぎます。具体的には、ゴミ箱に移動されただけではデータ上は削除されず、あくまでステータスが変化し、それにより閲覧権限などが切り分けられているだけです。ゴミ箱に移動されてから30日間(デフォルトの設定)の間は保持されています。
例えば公開済の記事であれば「publish」、下書き状態であれば「draft」というように状態に応じて記事にステータスが付与されている(post_statusの値が変化している)のですが、これが「trash」に変化します。
ちなみに、post_statusとして付与される値は具体的には以下の通りになります。
| ステータス名 | ステータスの説明 |
| trash | ゴミ箱に移動した記事に付与されます。 |
| publish | 誰でも見る事ができる状態の記事です。 |
| future | 「投稿予約」を行った記事です。非公開状態となります。 |
| draft | 「下書き」で保存された記事です。編集者以上の権限を持つ場合は閲覧できます。 |
| pending | 「承認待ち」で保存された記事です。編集者以上の権限を持つ場合は閲覧できます。 |
| private | 「非公開」で保存された記事です。管理者権限を持つ場合は閲覧できます。 |
| auto-draft | 自動保存された「リビジョン」です。本来の記事データとは別に保存されるバックアップデータです。 |
| inherit | WordPressでは「記事」のほか、「画像」なども同じテーブルに保存されます。記事に付与される画像などに付くステータスです。 |
■post_statusが「trash」になった記事は、どのように扱われるか
ゴミ箱に入った記事は、当然ながら「非表示」となります。これは検索や一覧表示に引っかからなくなり、記事のURLに直にアクセスしても表示されない…という状態になります。これは管理者ログインなどをしていても同じであり、管理画面の「ゴミ箱」ページ以外では一切表示されない状態です。
しかし、これはあくまでデフォルトの記事一覧、検索といった機能でpost_statusがtrashのものは含まない…となっているだけであり、クエリをカスタマイズすることで、ゴミ箱内の記事を含めたり、特定の条件でアクセスできるようにすることも可能です。記事がゴミ箱に入っている以上、どちらにせよアクセスはできないので一覧で表示したとて特に意味はないのですが、例えば管理用ページなどでゴミ箱に入っている記事を確認したい…といった時には使えるかもしれません。
具体的には、以下のようなコードでゴミ箱内の記事を取得できます。
//ゴミ箱内の記事を一覧で取得
$args = array(
'post_status' => 'trash',
'post_type' => 'post',
);
$trash_posts = new WP_Query($args);
//管理者だけは見れるようにする処理
add_action( 'pre_get_posts', function( $query ) {
// 管理画面ではなく、メインクエリで、ユーザーが管理者の場合に適用
if ( ! is_admin() && $query->is_main_query() && current_user_can( 'administrator' ) ) {
// 既存の post_status に 'trash' を追加
$query->set( 'post_status', array( 'publish', 'trash' ) );
}
});
■削除処理について
ゴミ箱に入ったまま30日間を過ぎると本当の削除処理が行われます。具体的には、データベース上から完全な削除、また記事に添付されていた画像、メタデータなども全て削除されます。
この30日間という期間は以下のコードをfunctions.phpやプラグインとして書く、といった方法で変更できます。
define( 'EMPTY_TRASH_DAYS', 7 ); // ゴミ箱を7日間に設定
ちなみに「EMPTY_TRASH_DAYS」の値を「0」とするとゴミ箱に入れた瞬間に削除されるようになります。
■ゴミ箱からの復元について
削除される前であれば、いつでも復帰させることができます。復帰させた直後は「下書き」状態となるので、これは改めて公開状態にする必要があります。
また、添付されていた画像やメタデータなども全て復帰され、元通りになります。
■ゴミ箱への移動や削除処理を検知する
ゴミ箱への移動、また実際に削除されたときの処理をトリガーとし、なんらかの機能を動作させることができます。
//ゴミ箱へ移動するときの処理 add_action('wp_trash_post', function($post_id) { error_log("投稿ID {$post_id} がゴミ箱に移動されました。"); }); //完全処理直前の処理 add_action('before_delete_post', function($post_id) { error_log("投稿ID {$post_id} が完全削除されます。"); });
プログラマー / S.Y
PHPフレームワーク「CodeIgniter」を用いたWebサイト開発を専門とする。要件に応じ、WordPressサイトの構築から、JavaScriptを活用した動的なフロントエンド・バックエンドの実装まで、幅広く担当する。