はじめに
メール送信は不要で内容のみDBに保存してほしい場合があったためまとめ
プラグイン
・CF7
環境
local
1.フォーム作成
コンタクトフォームを追加 から新しく作成
タイトルは任意のでok
フォーム内容はとりあえず初期状態
2.メール送信をスキップする設定
3.DBテーブル作成
CREATE TABLE test (
id INT AUTO_INCREMENT PRIMARY KEY,
name TEXT,
email TEXT,
subject TEXT,
message TEXT,
created_at DATETIME
);
フック作成
フォームにある氏名、メールアドレス、題名、メッセージ本文をDBに入れます。
子テーマのfunctions.phpに記入
add_action('wpcf7_before_send_mail', 'save_post');
function save_post($contact_form)
{
// 保存テスト(作成したフォーム名)フォーム以外なら実行しない 早期リターン
if ($contact_form->title() !== '保存テスト') return;
// DB操作
global $wpdb;
$table = 'test';
// 送信データを取得
$submission = WPCF7_Submission::get_instance();
// データがなければ終了
if (!$submission) return;
// 配列
$data = $submission->get_posted_data();
// フォームのフィールド名に合わせて取得
// <label> 氏名
// [text* your-name←ここ autocomplete:name] </label>
$name = $data['your-name'];
$email = $data['your-email'];
$subject = $data['your-subject'];
$message = $data['your-message'];
$create_at = current_time('mysql');
// DBに保存
$wpdb->insert($table, [
'name' => $name,
'email' => $email,
'subject' => $subject,
'message' => $message,
'created_at' => $create_at
]);
}