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 を使います。

お気軽にご相談ください

お見積りへ お問い合わせへ