2026年5月20日
2026年5月20日
WordPressのゴミ箱を定期的に自動削除する設定方法
はじめに
WordPressのゴミ箱(trash)は削除した投稿・ページ・メディアを一時的に保管します。デフォルトでは30日後に自動削除されますが、長期運用サイトではゴミ箱が大量に溜まりDBを肥大化させることがあります。自動削除のサイクルを短縮する方法を解説します。
デフォルトの動作
- 投稿を削除するとまずゴミ箱(
post_status='trash')に移動 wp_scheduled_deleteが毎日実行され、30日以上前のゴミ箱を完全削除EMPTY_TRASH_DAYS=0にするとゴミ箱機能自体を無効化(即完全削除)
自動削除日数の変更
wp-config.phpで日数を設定
// wp-config.php
define('EMPTY_TRASH_DAYS', 7); // 7日に短縮(デフォルト30日)
// define('EMPTY_TRASH_DAYS', 0); // ゴミ箱を無効化(即完全削除)
EMPTY_TRASH_DAYS=0 にすると管理画面の「ゴミ箱に移動」ボタンが「完全に削除」になります。
手動でゴミ箱を空にする
WP-CLIで即時削除
# ゴミ箱内の投稿を確認
wp post list --post_status=trash --fields=ID,post_title,post_type
# ゴミ箱を完全に空にする
wp post delete $(wp post list --post_status=trash --format=ids) --force
# メディアのゴミ箱も削除
wp post delete $(wp post list --post_type=attachment --post_status=trash --format=ids) --force
SQLで直接削除
-- ゴミ箱の投稿を確認
SELECT COUNT(*) FROM wp_posts WHERE post_status = 'trash';
-- ゴミ箱を完全削除
DELETE FROM wp_posts WHERE post_status = 'trash';
-- 孤立postmetaも削除
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
カスタムスケジュールで自動削除
// functions.php — 週次でゴミ箱を自動削除
add_action('init', function() {
if (!wp_next_scheduled('auto_empty_trash')) {
wp_schedule_event(time(), 'weekly', 'auto_empty_trash');
}
});
add_action('auto_empty_trash', function() {
$trashed = get_posts([
'post_status' => 'trash',
'posts_per_page' => -1,
'post_type' => 'any',
'fields' => 'ids',
'date_query' => [['before' => '7 days ago']],
]);
foreach ($trashed as $id) {
wp_delete_post($id, true); // force_delete=true で完全削除
}
});
コメントのゴミ箱も削除
# コメントのゴミ箱を確認
wp comment list --status=trash --format=count
# コメントゴミ箱を削除
wp comment delete $(wp comment list --status=trash --format=ids) --force
注意事項
EMPTY_TRASH_DAYS=0にするとゴミ箱に移動しなくなるため、誤って削除した場合の復元が不可能になりますwp_delete_post($id, true)のtrueを忘れると再度ゴミ箱に移動するだけです- メディアファイル(実ファイル)は
wp_delete_attachment()を使わないとDBからは削除されてもファイルが残ります
まとめ
ゴミ箱の自動削除は EMPTY_TRASH_DAYS=7 を wp-config.php に追加するだけで7日サイクルに変更できます。即時削除が必要な場合は wp post delete $(wp post list --post_status=trash --format=ids) --force を使います。