WordPressを複製したあと、大量の投稿データを5分で全削除する方法

WordPressの投稿データだけを完全削除する方法 – 設定は残してコンテンツをリセット

なぜこの方法が必要なのか?実際の活用シーン

WordPressを長年運用していると、こんな悩みに直面することがあります。

ケース1:企業サイトのリニューアル

5年間運用してきた企業ブログ。デザインやプラグインの設定は完璧に仕上がっているけれど、事業方針の変更で過去の記事をすべて削除して、新しいコンテンツで再スタートしたい。でも、1,000件以上ある記事を管理画面から1つずつ削除するのは現実的ではありません。

ケース2:テンプレートとして再利用

美容院のサイトを作った後、同じデザインで飲食店のサイトを作りたい。テーマやカスタムフィールドの設定はそのまま使いたいけれど、美容院の投稿データは当然不要です。

ケース3:開発環境から本番環境への移行

制作会社がクライアントに納品する際、開発中に入れたダミー記事やテスト投稿を削除したい。でも、苦労して設定したACFのフィールドグループやカスタム投稿タイプの設定は残したい。

これらの場合、WordPressの「ツール」→「リセット」では設定まですべて消えてしまいます。かといって、管理画面から削除するのも非効率的。そこで、データベースを直接操作する方法が最も効率的なのです。

事前準備:失敗しないための3つのポイント

1. 現在の状況を正確に把握する

まず、WordPressにどんなデータが入っているか確認しましょう。管理画面にログインして以下をチェックしてください:

  • 投稿数:ダッシュボードまたは「投稿」→「すべての投稿」で確認
  • カスタム投稿タイプ:「CPT UI」や「Custom Post Type UI」などのプラグインを使用している場合、どんな投稿タイプがあるか確認
  • カテゴリー・タグの数:「投稿」→「カテゴリー」「タグ」で確認
  • カスタムフィールド:ACFなどを使っている場合、フィールドグループの設定を確認

この情報は、削除後に正しく動作しているか確認する際に必要になります。

2. バックアップは2重に取る

データベースの操作は一発勝負。やり直しはできません。必ず以下の2つの方法でバックアップを取りましょう。

方法1:プラグインでバックアップ

  • 「All-in-One WP Migration」や「UpdraftPlus」などのバックアッププラグインを使用
  • サイト全体のバックアップを取得

方法2:データベースのバックアップ

  • phpMyAdminから直接SQLファイルをエクスポート(後述)

3. できればテスト環境で練習する

本番サイトでいきなり実行するのは危険です。可能であれば以下の方法でテスト環境を用意しましょう:

  • Local by Flywheelなどのローカル開発環境にサイトをコピー
  • レンタルサーバーのテスト環境機能を利用
  • サブドメインに複製を作成

phpMyAdminへのアクセス方法(詳細版)

エックスサーバーの場合

  1. エックスサーバーのサーバーパネルにログイン
    • ログインURL:https://secure.xserver.ne.jp/xapanel/login/xserver/server/
    • サーバーIDとサーバーパスワードを入力
  2. データベース項目を探す
    • サーバーパネルの中段あたりにある「データベース」セクション
    • 「phpmyadmin(MySQL5.7)」または「phpmyadmin(MariaDB10.5)」をクリック
  3. データベースを選択
    • 左側のリストから該当するデータベース名をクリック
    • データベース名は通常「サーバーID_wp1」のような形式

ロリポップの場合

  1. ユーザー専用ページにログイン
    • ログインURL:https://user.lolipop.jp/
    • ロリポップのドメインとパスワードを入力
  2. データベースメニューを開く
    • 左側メニューの「サーバーの管理・設定」→「データベース」
  3. phpMyAdminを開く
    • 該当するデータベースの行にある「phpMyAdminを開く」ボタンをクリック
    • ユーザー名とパスワードが自動入力されるので「実行する」をクリック

さくらインターネットの場合

  1. コントロールパネルにログイン
    • ログインURL:https://secure.sakura.ad.jp/auth/login
  2. データベースメニューを選択
    • 左側メニューの「Webサイト/データ」→「データベース」
  3. phpMyAdminにアクセス
    • データベース一覧から該当するものの「phpMyAdmin」ボタンをクリック
    • データベース接続用パスワードを入力

データベース名がわからない場合の確認方法

WordPressのファイルマネージャーかFTPソフトで、サイトのルートディレクトリにあるwp-config.phpファイルを確認します。以下のような記述を探してください:

/** WordPress のためのデータベース名 */
define('DB_NAME', 'ここにデータベース名が記載されています');

/** MySQL データベースのユーザー名 */
define('DB_USER', 'ユーザー名');

/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'パスワード');

/** データベースのテーブルを作成する際のデータベースの文字セット */
$table_prefix = 'wp_';  // この部分も重要です!

この$table_prefixの値は後で使用するので、メモしておいてください。

phpMyAdminでのバックアップ取得(画像付き解説)

  1. データベースを選択
    • 左側のデータベース一覧から、WordPressが使用しているデータベースをクリック
  2. エクスポートタブを選択
    • 上部のタブメニューから「エクスポート」をクリック
  3. エクスポート方法を選択
    • 「簡易」が選択されていることを確認
    • フォーマットは「SQL」のまま
  4. 実行ボタンをクリック
    • 画面下部の「実行」ボタンをクリック
    • データベース名.sqlというファイルがダウンロードされます
  5. ダウンロードしたファイルを確認
    • ファイルサイズが数MB〜数十MBあることを確認
    • ファイル名に今日の日付を追加して保存(例:database_20240115.sql

実践:投稿データの一括削除

ステップ1:削除前の最終確認

phpMyAdminの「SQL」タブをクリックして、以下のコードを貼り付けて実行します。これで、どんなデータが削除されるか確認できます。

-- 削除される投稿の種類と数を確認
SELECT post_type as '投稿タイプ', COUNT(*) as '件数' 
FROM wp_posts 
WHERE post_type NOT IN ('page', 'attachment', 'nav_menu_item', 'custom_css', 'customize_changeset', 'wp_block', 'wp_template', 'wp_template_part', 'wp_global_styles', 'wp_navigation')
GROUP BY post_type;

-- 削除される分類の種類と数を確認
SELECT taxonomy as '削除される分類', COUNT(*) as '件数' 
FROM wp_term_taxonomy 
WHERE taxonomy NOT IN ('nav_menu', 'link_category')
GROUP BY taxonomy;

-- カスタムフィールドの総数を確認
SELECT COUNT(*) as '削除されるカスタムフィールド数' 
FROM wp_postmeta 
WHERE post_id IN (
    SELECT ID FROM wp_posts 
    WHERE post_type NOT IN ('page', 'attachment', 'nav_menu_item', 'custom_css', 'customize_changeset', 'wp_block', 'wp_template', 'wp_template_part', 'wp_global_styles', 'wp_navigation')
);

重要wp_の部分は、先ほど確認した$table_prefixの値に置き換えてください。

ステップ2:完全削除の実行

以下のコードをコピーして、phpMyAdminのSQLタブに貼り付け、実行します。

-- =====================================================
-- WordPress 投稿データの完全削除
-- =====================================================

-- 1. すべての投稿を削除(固定ページとメディアは残す)
DELETE FROM wp_posts 
WHERE post_type NOT IN (
    'page', 'attachment', 'nav_menu_item', 'custom_css', 
    'customize_changeset', 'wp_block', 'wp_template', 
    'wp_template_part', 'wp_global_styles', 'wp_navigation'
);

-- 2. カスタムフィールドを削除
DELETE FROM wp_postmeta 
WHERE post_id NOT IN (SELECT ID FROM wp_posts);

-- 3. 投稿との関連付けを削除
DELETE FROM wp_term_relationships 
WHERE object_id NOT IN (SELECT ID FROM wp_posts);

-- 4. カテゴリー・タグ・カスタム分類を削除
DELETE FROM wp_term_taxonomy 
WHERE taxonomy NOT IN ('nav_menu', 'link_category');

-- 5. 使われなくなった分類名を削除
DELETE FROM wp_terms 
WHERE term_id NOT IN (SELECT term_id FROM wp_term_taxonomy);

-- 6. 分類の追加情報を削除
DELETE FROM wp_termmeta 
WHERE term_id NOT IN (SELECT term_id FROM wp_terms);

-- 7. コメントを削除
DELETE FROM wp_comments 
WHERE comment_post_ID NOT IN (SELECT ID FROM wp_posts);

-- 8. コメントの追加情報を削除
DELETE FROM wp_commentmeta 
WHERE comment_id NOT IN (SELECT comment_ID FROM wp_comments);

-- 9. デフォルトカテゴリーを再作成
INSERT INTO wp_terms (term_id, name, slug, term_group) 
VALUES (1, '未分類', 'uncategorized', 0)
ON DUPLICATE KEY UPDATE name = '未分類';

INSERT INTO wp_term_taxonomy (term_id, taxonomy, description, parent, count) 
VALUES (1, 'category', '', 0, 0)
ON DUPLICATE KEY UPDATE taxonomy = 'category';

-- 10. 設定を更新
UPDATE wp_options SET option_value = '1' WHERE option_name = 'default_category';

-- 11. ID番号をリセット
ALTER TABLE wp_posts AUTO_INCREMENT = 1;
ALTER TABLE wp_postmeta AUTO_INCREMENT = 1;
ALTER TABLE wp_terms AUTO_INCREMENT = 1;
ALTER TABLE wp_term_taxonomy AUTO_INCREMENT = 1;
ALTER TABLE wp_term_relationships AUTO_INCREMENT = 1;
ALTER TABLE wp_termmeta AUTO_INCREMENT = 1;
ALTER TABLE wp_comments AUTO_INCREMENT = 1;
ALTER TABLE wp_commentmeta AUTO_INCREMENT = 1;

実行後、「〇〇行削除しました」というメッセージが表示されれば成功です。

削除後の確認作業(チェックリスト)

1. WordPress管理画面での確認

以下の項目を順番に確認していきます:

  • [ ] ダッシュボード:「概要」ウィジェットで投稿数が0になっているか
  • [ ] 投稿一覧:「投稿」→「投稿一覧」を開いて、記事が0件になっているか
  • [ ] カテゴリー:「投稿」→「カテゴリー」で「未分類」のみ存在するか
  • [ ] タグ:「投稿」→「タグ」でタグが0件になっているか
  • [ ] メディア:「メディア」→「ライブラリ」で画像等が残っているか
  • [ ] 固定ページ:「固定ページ」→「固定ページ一覧」でページが残っているか
  • [ ] メニュー:「外観」→「メニュー」でメニュー設定が残っているか
  • [ ] ウィジェット:「外観」→「ウィジェット」で設定が残っているか

2. プラグインの設定確認

使用しているプラグインの設定が残っているか確認します:

  • [ ] ACF(Advanced Custom Fields):フィールドグループの設定が残っているか
  • [ ] CPT UI:カスタム投稿タイプの設定が残っているか
  • [ ] Contact Form 7:フォームの設定が残っているか
  • [ ] Yoast SEO / All in One SEO:SEO設定が残っているか

3. 新規投稿のテスト

実際に新しい投稿を作成して、すべてが正常に動作するか確認します:

  1. 通常の投稿を作成
    • 「投稿」→「新規追加」
    • タイトルと本文を入力
    • カテゴリーを「未分類」に設定
    • 公開ボタンをクリック
  2. カスタムフィールドの動作確認
    • ACFなどで設定したフィールドが表示されるか
    • 値を入力して保存できるか
  3. 表示確認
    • 公開した投稿がサイト上で正しく表示されるか
    • アーカイブページが正常に動作するか

よくあるトラブルと解決方法

エラー1:「Table ‘wp_posts’ doesn’t exist」

原因:テーブル接頭辞が違っています。 解決方法

  1. phpMyAdminの左側でテーブル一覧を確認
  2. wp_postsではなくwp1_postswpx_postsなどになっている場合は、SQLコード内のすべてのwp_をその接頭辞に置換

エラー2:管理画面でエラーが表示される

原因:必要なデータまで削除してしまった可能性があります。 解決方法

  1. phpMyAdminでバックアップファイルをインポート
  2. 「インポート」タブ→ファイルを選択→実行

エラー3:新しいカテゴリーが作成できない

原因:デフォルトカテゴリーの設定が正しくない。 解決方法

UPDATE wp_options SET option_value = '1' WHERE option_name = 'default_category';
DELETE FROM wp_options WHERE option_name = 'default_category';

エラー4:カスタム投稿タイプが表示されない

原因:プラグインが無効になっている可能性があります。 解決方法

  1. プラグイン一覧で関連プラグインが有効か確認
  2. 無効になっていたら有効化
  3. それでも表示されない場合は、プラグインを一度無効化→有効化

応用編:条件を指定した削除

古い投稿だけを削除したい場合

2年以上前の投稿のみを削除する場合:

-- 2年以上前の投稿を削除
DELETE FROM wp_posts 
WHERE post_type NOT IN ('page', 'attachment', 'nav_menu_item', 'custom_css', 'customize_changeset', 'wp_block', 'wp_template', 'wp_template_part', 'wp_global_styles', 'wp_navigation')
AND post_modified < DATE_SUB(NOW(), INTERVAL 2 YEAR);

-- 削除した投稿のカスタムフィールドを削除
DELETE FROM wp_postmeta 
WHERE post_id NOT IN (SELECT ID FROM wp_posts);

-- 以下、通常の削除と同じ手順

特定のカスタム投稿タイプを残したい場合

例えば「product」という投稿タイプを残す場合:

DELETE FROM wp_posts 
WHERE post_type NOT IN ('page', 'attachment', 'nav_menu_item', 'custom_css', 'customize_changeset', 'wp_block', 'wp_template', 'wp_template_part', 'wp_global_styles', 'wp_navigation', 'product');

セキュリティ上の注意点

phpMyAdminの使用後は必ずログアウト

phpMyAdminにログインしたままにしておくと、セキュリティリスクがあります。作業が終わったら必ずログアウトしましょう。

データベースのパスワードは定期的に変更

WordPressのデータベースパスワードは定期的に変更することをお勧めします。変更した場合は、wp-config.phpの以下の部分も更新が必要です:

define('DB_PASSWORD', '新しいパスワード');

バックアップファイルの管理

ダウンロードしたSQLファイルには、すべてのデータが含まれています。以下の点に注意してください:

  • パスワード付きのZIPファイルに圧縮して保存
  • クラウドストレージに保存する場合は、二段階認証を設定
  • 不要になったバックアップファイルは完全に削除

まとめ:成功のポイント

WordPressの投稿データだけを削除する作業は、正しい手順で行えば決して難しくありません。成功のポイントは以下の3つです:

  1. 事前準備を怠らない:バックアップは必須、できればテスト環境で練習
  2. 確認作業を省略しない:削除前の確認SQLで、何が削除されるか必ず確認
  3. 削除後のテストを丁寧に:新規投稿の作成テストで、正常動作を確認

この方法をマスターすれば、WordPressサイトの再利用や転用が格段に楽になります。制作会社の方であれば、クライアントへの納品前のクリーンアップ作業も効率化できるでしょう。

ただし、データベースの操作は常にリスクを伴います。不安な場合は、WordPress専門の技術者に相談することをお勧めします。また、レンタルサーバーによっては、サポートで相談に乗ってくれる場合もあるので、活用してみてください。

正しい知識と慎重な作業で、あなたのWordPressライフがより快適になることを願っています。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。