0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Wordpress】Contact Formで送信した内容をDBに保存する

Posted at

はじめに

メール送信は不要で内容のみDBに保存してほしい場合があったためまとめ

プラグイン

・CF7

環境

local

1.フォーム作成

コンタクトフォームを追加 から新しく作成
タイトルは任意のでok
フォーム内容はとりあえず初期状態

2.メール送信をスキップする設定

その他の設定に下記記入
skip_mail: on
image.png

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
    ]);
}

結果

image.png

created_atが000になってますが気にしないでほしい
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?