Contact Form CFDB7 のデータを一気に消去する方法(TRUNCATE対応)

Contact Form 7の送信内容をWordPressのデータベースへ保存できる
Database Addon for Contact Form 7 - CFDB7(Contact Form CFDB7)

長期間運用していると、過去のお問い合わせデータが大量に保存され、「古いデータをすべて削除して空の状態に戻したい」ということがあります。

そのような場合、データベースの対象テーブルをTRUNCATE TABLEで初期化する方法があります。

ただし、CFDB7ではデータベースだけでなく、フォームからアップロードされた添付ファイルを別のディレクトリへ保存する場合があります。
そのため、データベースだけTRUNCATEすればすべて削除完了、というわけではありません。

この記事では、CFDB7の保存データを一括削除するときの正しい考え方と、phpMyAdminを使って安全に作業する手順を解説します。

この記事はCFDB7 1.4.0の仕様をもとにしています。
プラグインの仕様は今後変更される可能性があるため、実際の作業前には使用中のバージョンとデータ構造を確認してください。

1 最重要:作業前に必ずバックアップする

TRUNCATE TABLEは、対象テーブルのデータを一括で削除する非常に強力なSQLです。

一度実行すると、通常のWordPress操作で元に戻すことはできません。

作業前に、最低でも次の2つをバックアップしてください。

  • WordPressのデータベース
  • WordPressのuploadsディレクトリ

特にお問い合わせフォームには、

  • 氏名
  • メールアドレス
  • 電話番号
  • 住所
  • お問い合わせ内容
  • アップロードファイル

など重要な情報が含まれている可能性があります。

「もう不要だと思う」ではなく、「完全に削除して問題ない」と確認してから作業してください。

2 CFDB7のデータはどこに保存される?

CFDB7は、Contact Form 7から送信されたデータをWordPressのデータベースへ保存します。

通常のWordPress環境では、テーブル名は次のようになります。

wp_db7_forms

ただし、先頭の wp_ はWordPressのテーブル接頭辞です。

WordPressのインストール環境によっては、

abc_db7_forms
wp123_db7_forms

など、別の名前になっている場合があります。

そのため、「必ずwp_db7_formsだ」と決めつけず、phpMyAdminで実際のテーブル名を確認してください。

3 CFDB7はすべてのフォームを1つのテーブルへ保存する

通常のCFDB7では、Contact Form 7のフォームごとに別々のテーブルを作成するのではなく、複数フォームの送信データを1つのテーブルへ保存します。

テーブルには主に、

  • form_id
  • form_post_id
  • form_value
  • form_date

といった情報が保存されています。

そのため、

TRUNCATE TABLE wp_db7_forms;

を実行すると、特定のフォームだけではなく、CFDB7に保存されているすべてのフォーム送信履歴が削除されます。

フォームAだけ削除したい、過去1年分だけ削除したい、といった用途ではTRUNCATEを使用してはいけません。

4 添付ファイルはデータベースとは別に保存される

ここは非常に重要です。

Contact Form 7でファイルアップロードを使用している場合、CFDB7は送信されたファイルをWordPressのuploadsディレクトリ内にコピーすることがあります。

通常は次のディレクトリです。

wp-content/uploads/cfdb7_uploads/

つまり、CFDB7では、

データベース
wp_db7_forms

+

添付ファイル
wp-content/uploads/cfdb7_uploads/

という2か所にデータが存在する可能性があります。

5 TRUNCATEしても添付ファイルは削除されない

phpMyAdminから、

TRUNCATE TABLE wp_db7_forms;

を直接実行した場合、データベースのレコードは削除されます。

しかし、データベースを直接操作しているため、CFDB7プラグイン側の通常の削除処理は実行されません。

その結果、

データベース
→ 空になる

cfdb7_uploads
→ 添付ファイルが残る可能性がある

という状態になります。

「お問い合わせ履歴を全部消したから、添付ファイルも全部削除されたはず」と思い込まないように注意してください。

6 CFDB7管理画面から削除した場合はどうなる?

現在のCFDB7では、管理画面から送信データを削除すると、そのレコードに関連付けられているCFDB7の添付ファイルを確認し、ファイルが存在すれば削除してからデータベースのレコードを削除する処理があります。

そのため、件数がそれほど多くない場合は、
CFDB7管理画面から削除する方法の方が安全です。

添付ファイルを使用しているサイトでは、特にこの違いを理解しておく必要があります。

7 functions.phpにTRUNCATEを書くのは避ける

次のようなコードをfunctions.phpへ直接書く方法が紹介されることがあります。

global $wpdb;

$wpdb->query(
	"TRUNCATE TABLE {$wpdb->prefix}db7_forms"
);

SQLそのものとしては対象テーブルをTRUNCATEできますが、
functions.phpへそのまま記述する方法はおすすめできません。

functions.phpはWordPressのページ表示や管理画面の処理などで繰り返し読み込まれます。

そのため、このコードを消し忘れると、

  1. CFDB7のデータを削除する
  2. 新しいお問い合わせが届く
  3. その後WordPressが再度functions.phpを読み込む
  4. 再びTRUNCATEが実行される
  5. 新しいお問い合わせまで消える

という重大な事故につながります。

一度だけ実行したいSQLを、通常動作するfunctions.phpへ直接置くのは避けましょう。

8 おすすめはphpMyAdminから一度だけ実行する方法

すべてのCFDB7送信履歴を本当に削除したい場合は、
phpMyAdminなどのデータベース管理画面から、
対象テーブルを確認したうえで一度だけTRUNCATEを実行する方法が分かりやすいです。

9 手順① データベースをバックアップする

最初に必ずデータベース全体をバックアップします。

レンタルサーバーのバックアップ機能を利用してもかまいませんし、phpMyAdminのエクスポート機能を利用する方法もあります。

可能であれば、CFDB7のCSVエクスポートも行っておくと安心です。

10 手順② cfdb7_uploadsもバックアップする

Contact Form 7でファイルアップロードを使用している場合は、

wp-content/uploads/cfdb7_uploads/

も確認してください。

必要なファイルが残っている場合は、FTPやサーバーのファイルマネージャーなどを使ってバックアップします。

11 手順③ phpMyAdminでCFDB7のテーブルを確認する

phpMyAdminを開き、WordPressで使用しているデータベースを選択します。

テーブル一覧から、

○○○_db7_forms

というテーブルを探します。

一般的な環境なら、

wp_db7_forms

です。

ただし、必ず実際のテーブル名を確認してください。

12 手順④ 削除前にデータ件数を確認する

いきなりTRUNCATEせず、まずテーブルを開いて本当にCFDB7のデータであることを確認します。

SQLで確認する場合は、

SELECT COUNT(*) FROM wp_db7_forms;

のように件数を確認できます。

接頭辞が違う場合は、実際のテーブル名へ変更してください。

13 手順⑤ TRUNCATEを実行する

バックアップと対象テーブルの確認が完了し、すべてのCFDB7送信履歴を削除して問題ないことを確認したら実行します。

TRUNCATE TABLE wp_db7_forms;

接頭辞が異なる場合は、たとえば、

TRUNCATE TABLE abc_db7_forms;

のように変更します。

テーブル名を間違えると別のデータを削除する危険があります。

SQL実行前に、もう一度テーブル名を確認してください。

14 TRUNCATE実行後の状態

TRUNCATEを実行すると、CFDB7の対象テーブル内のデータがすべて削除されます。

また、AUTO_INCREMENTの採番も初期状態へ戻ります。

CFDB7のテーブル自体を削除するわけではないため、プラグインが正常に動作していれば、その後の新しいお問い合わせは再び同じテーブルへ保存されます。

15 手順⑥ 添付ファイルを確認する

TRUNCATEを実行しただけでは、CFDB7が保存した添付ファイルが残っている可能性があります。

FTPやサーバーのファイルマネージャーで、

wp-content/uploads/cfdb7_uploads/

を確認してください。

今回、CFDB7の保存データを完全に全件削除する目的で、ディレクトリ内の添付ファイルもすべて不要であることを確認できている場合は、バックアップを取ったうえで不要ファイルを削除します。

ただし、ディレクトリ内には、

index.php

が作成されている場合があります。

これはCFDB7がディレクトリ内に作成するファイルなので、一括削除する場合でも、内容を確認せずディレクトリ自体を丸ごと削除するのは避けた方が安全です。

16 先にDBをTRUNCATEすると添付ファイルとの対応関係が分からなくなる

CFDB7では、データベース内に添付ファイル名の情報を保存しています。

そのため、

先にデータベースをTRUNCATE
↓
あとから添付ファイルを調べる

という順番にすると、どの添付ファイルがどの送信データに対応していたのか確認しにくくなります。

添付ファイルがあるサイトでは、TRUNCATE前にcfdb7_uploadsの内容を確認・バックアップすることが重要です。

17 手順⑦ CFDB7管理画面を確認する

TRUNCATE後にWordPress管理画面へ戻り、CFDB7の一覧を確認します。

保存データが空になっていることを確認してください。

18 手順⑧ テスト送信する

削除作業が終わったら、Contact Form 7からテスト送信します。

確認するポイントは次のとおりです。

  • Contact Form 7から正常に送信できる
  • メールが正常に届く
  • CFDB7に新しいデータが保存される
  • ファイル添付を使用している場合は正常に保存される

データを削除できたことだけでなく、
その後も正常に新しいお問い合わせを保存できることまで確認して作業完了としましょう。

19 TRUNCATEとDELETEの違い

項目 TRUNCATE DELETE
全件削除 可能 可能
WHEREで一部削除 不可 可能
大量データの全件削除 一般に高速 行単位の削除になる
AUTO_INCREMENT リセットされる 通常は自動リセットされない
ロールバック 通常できない DBエンジンやトランザクション条件による
CFDB7の添付ファイル削除処理 DBから直接実行した場合は動かない DBから直接実行した場合は動かない

ここで重要なのは、
TRUNCATEかDELETEかではなく、データベースを直接操作するとCFDB7の通常削除処理を通らないという点です。

次のように直接DELETEした場合も、

DELETE FROM wp_db7_forms;

CFDB7の管理画面から削除したことにはなりません。

そのため、関連する添付ファイルまで自動的に削除されるとは考えないようにしてください。

20 一部のデータだけ削除したい場合はTRUNCATEを使わない

TRUNCATEは「全部削除する」ためのSQLです。

たとえば、

  • 特定フォームのデータだけ削除したい
  • 1年以上前のデータだけ削除したい
  • 特定期間だけ削除したい
  • 一部のお問い合わせだけ残したい

といった用途には向いていません。

この場合はCFDB7管理画面から削除するか、
データ構造を理解したうえでDELETEの条件を慎重に指定する必要があります。

特に添付ファイルが存在する場合は、データベースだけを直接削除するとファイルが残る可能性があるため注意してください。

21 特殊な環境ではテーブル名が違う可能性もある

通常のCFDB7ではWordPressのデータベース接続とテーブル接頭辞を利用します。

ただしCFDB7には、開発者がデータベース接続を変更できる仕組みもあります。

独自コードやアドオンなどによってCFDB7の保存先データベースを変更している場合、通常のWordPressデータベースにある wp_db7_forms が実際の保存先とは限りません。

特殊なカスタマイズを行っているサイトでは、必ず実際の保存先を確認してから作業してください。

22 TRUNCATEを定期実行するのはおすすめしない

CFDB7のデータが増えるからといって、

毎月TRUNCATEする
定期的にfunctions.phpからTRUNCATEする
cronで自動TRUNCATEする

といった運用はおすすめできません。

お問い合わせ履歴には重要な情報が含まれている場合があり、誤って必要なデータまで削除してしまう可能性があります。

保存期間を決めてデータを管理したいのであれば、

  • 必要な期間を決める
  • バックアップ方針を決める
  • 古いデータだけ削除する仕組みを検討する
  • 添付ファイルの削除もセットで考える

といった運用の方が適しています。

23 おすすめの削除方法を整理

23.1 件数が少ない場合

CFDB7の管理画面から削除する方法をおすすめします。

プラグイン本来の削除処理を通るため、関連する添付ファイルがある場合も処理されます。

23.2 すべての保存履歴を一度に初期化したい場合

次の条件をすべて満たしている場合は、TRUNCATEを検討できます。

  • CFDB7の全送信履歴が不要
  • データベースのバックアップ済み
  • cfdb7_uploadsも確認・バックアップ済み
  • 正しいデータベースとテーブル名を確認済み
  • 添付ファイルの扱いを確認済み

そのうえでphpMyAdminから一度だけ実行します。

TRUNCATE TABLE wp_db7_forms;

24 まとめ:CFDB7の一括削除はDBと添付ファイルの両方を確認する

CFDB7の保存データをすべて初期化したい場合、対象テーブルをTRUNCATEすることでデータベースのレコードを一括削除できます。

ただし、最も重要なのは、
CFDB7のデータはデータベースだけとは限らないという点です。

  • 通常の保存テーブルは「WordPress接頭辞 + db7_forms」
  • TRUNCATEすると全フォームの保存履歴が削除される
  • functions.phpへTRUNCATEを直接書かない
  • 添付ファイルはcfdb7_uploadsに残る可能性がある
  • CFDB7管理画面からの通常削除では関連ファイルも削除処理される
  • DBを直接TRUNCATE/DELETEするとプラグインの削除処理は動かない
  • 作業前にデータベースとuploadsの両方をバックアップする
  • 一部だけ削除する場合はTRUNCATEを使わない
  • 削除後は必ずContact Form 7からテスト送信する

TRUNCATEは、大量のデータを一度に初期化するには便利なSQLですが、日常的なメンテナンスとして気軽に実行するものではありません。

「全件削除して本当に問題ないか」「添付ファイルも不要か」を確認し、バックアップを取得してから一度だけ実行することが重要です。