【WordPress】自動下書き投稿の一括削除・自動削除処理を実装する方法

【WordPress】自動下書き投稿の一括削除・自動削除処理を実装する方法 WordPress

WordPressでは、投稿を作成したまま放置している「自動下書き(auto-draft)」が管理画面に溜まっていくことがあります。これらは定期的に削除することで、データベースの不要な肥大化を防ぎ、運用を快適に保つことができます。

この記事では、管理画面から一括削除する方法と、定期的に自動削除する処理をfunctions.phpに実装する方法の両方を紹介します。

自動下書きとは

WordPressでは、新規投稿画面を開いただけで「auto-draft」ステータスの投稿が自動的に生成されます。これらは未使用であれば削除しても問題ありません。

一括削除処理をfunctions.phpに追加する方法

以下のコードをテーマの functions.php に追加することで、管理者が任意のタイミングで自動下書きを一括削除できます。

function delete_all_auto_drafts() {
  global $wpdb;
  $auto_drafts = $wpdb->get_col(
    "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'auto-draft'"
  );

  foreach ($auto_drafts as $post_id) {
    wp_delete_post($post_id, true);
  }
}

この関数を呼び出せば一括削除が行われます。例えば管理画面にボタンを設置して呼び出すことも可能です。

定期的に自動削除する処理の実装(Cron対応)

WordPressの疑似Cron(WP-Cron)を使えば、定期的に「auto-draft」を自動で削除できます。以下のコードを functions.php に追加してください。

// イベントの登録
function schedule_auto_draft_cleanup() {
  if (!wp_next_scheduled('auto_draft_cleanup_event')) {
    wp_schedule_event(time(), 'daily', 'auto_draft_cleanup_event');
  }
}
add_action('wp', 'schedule_auto_draft_cleanup');

// イベントのフック処理
function run_auto_draft_cleanup() {
  global $wpdb;
  $auto_drafts = $wpdb->get_col(
    "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'auto-draft'"
  );

  foreach ($auto_drafts as $post_id) {
    wp_delete_post($post_id, true);
  }
}
add_action('auto_draft_cleanup_event', 'run_auto_draft_cleanup');

この処理により、1日に1回、自動で不要な自動下書きが削除されます。

登録されたCronイベントの確認方法

実行予定のWP-Cronイベントを確認するには、「WP Crontrol」などのプラグインを使用すると便利です。管理画面から現在のスケジュールと実行履歴を一覧表示できます。

注意点

  • この処理は「auto-draft」投稿のみを対象にしています。他の下書き(draft)は削除されません。
  • データを完全に削除するため、削除後に復元はできません。念のためバックアップを取ってから実行してください。
  • 運用中のサイトでは、頻度やタイミングを考慮して実装してください。

まとめ

WordPressで自動生成される「auto-draft」投稿は、定期的にクリーンアップすることで管理画面やデータベースの整理につながります。一括削除と自動削除を組み合わせて導入すれば、手間なく運用効率を上げることができます。

運用状況に応じて、削除頻度や処理対象をカスタマイズしてみてください。