ContactForm7のプラグインをつかってメール送信することができますが、メール送信の停止また入力フォームで入力したデータを取得しログ出力やDB登録などが可能となります。
ホームぺージのお問合せフォームを作成するために使われる「Contact Form7」。簡単にフォームが作成でき、またメール送信まで行う事ができます。
この「ContactForm7」で入力した値を取得した、取得した値をログやデータベースに登録したいという場合にはアクションフックを使って入力した値を取り出すことができます。取り出した値は自由に利用することができます。
事前設定
ContactForm7を利用するためのWordpressインストールやプラグインインストールについては割愛します!
アクションフックについて
ContactForm7には数多くのアクションフックが用意されています。
アクションフックを利用することでプラグイン動作中の好きなところで処理を追加することができます。(要PHPスキル)
例として「メール送信の成功時」のアクションフックを利用します。
アクションフックの利用方法
function.phpに以下を記載します。
add_action('wpcf7_mail_sent', 'insert_data');
第1引数にはアクションフック名を設定、第2引数には呼び出す関数名を設定します。
第2引数で設定する関数名については独自につけた関数名で問題ありません!
独自関数の作成
ログに出力する
ContactForm7で入力した値を取得しログに出力します。
// メールフォーム送信時のデータ登録
function insert_data($contact_form) {
// ContactForm7のインスタンスを取得
$submission = WPCF7_Submission::get_instance();
if($submission) {
//送信情報を取得
$formdata = $submission->get_posted_data();
// ログファイル名を設定
$LOG_NAME = 'hoge.log';
$today = date('Y/m/d H:i:s',strtotime('+9 hour')) ; // 日本時間を算出
// 日付をログに出力
file_put_contents($LOG_NAME, $today . "\n",FILE_APPEND);
// フォームの入力値をログに出力
$form_id = $contact_form->id();
file_put_contents($LOG_NAME, $contact_form->id() . "\n",FILE_APPEND);
file_put_contents($LOG_NAME, $contact_form->title() . "\n",FILE_APPEND);
// データをセット
file_put_contents($LOG_NAME, $formdata['customer_name'] . "\n",FILE_APPEND);
}
}
}
// ContactForm7アクションフック(メール送信成功時)
add_action('wpcf7_mail_sent', 'insert_data');
ログファイルの出力先は「https://ドメイン/hoge.log」です。
「file_put_contents」を使ってテキストファイルにデータを出力します。
データベースに登録する
入力フォームの値をデータベースに登録するためには以下の方法があります。
プラグインを利用する
プラグインを使うと簡単にデータベースへ登録することができます。ただしデータを画面に表示する場合はデータの持ち方にクセがあるので少し工夫が必要となります。参照するだけであればプラグインの機能を使って簡単に表示させることができます。
プラグインを使うと登録と参照は簡単にできますが、更新と削除は自身で構築する必要があります。※有料プランなどにより対応可能な場合もあります。
SQLを使う場合更新であればUPDATE、削除であればDELETEを自身で発行しSQL実行することでDB操作をすることができます。
自身でSQLを発行する
プラグインのテーブル構造は使いにくいため、登録したデータを自身でうまく利用した場合は独自テーブルを作成し、そこに登録することで利便性が向上します。
- テーブル作成:CREATE TABLE
- データ登録:INSERT
- データ更新:UPDATE
- データ削除;DELETE
- データ取得:SELECT
上記が使えればテーブル作成からデータ操作まで問題なく対応できます。
入力元ぺージを識別する
お問い合わせフォームのIDを取得することができます。これによってどのお問い合わせフォームからPOSTされたデータなのかを識別することができます。
// メールフォーム送信時のデータ登録
function wpcf7_insert_user($contact_form) {
// お問い合わせフォームのIDを取得
$form_id = $contact_form->id();
}
お問い合わせフォームのIDと同じ値が取得できます。
[contact-form-7 id="34" title="xxxxxxx"]
上記の場合$contact_form->id()では34が取得できます。
if($form_id == "34") {
// ここにフォームIDが34の場合の処理を記載
}