WEBサイト制作

Contact Form 7でメールアドレス等のデータを取得する方法

WordPressのお問い合わせフォームのプラグイン「Contact Form 7」から、現在登録されているメールアドレス等のデータを取得したいことがあると思います。

通常の投稿やカスタムポストであれば、wp_queryで取得できますが、Contact Form 7のデータはやや特殊な形式でデータベースに入っていますので、直接、WordPressのDBにアクセスしてデータを抜き出してくるのが手っ取り早いです。

コンタクトフォームの取得

まずは、コンタクトフォームを取得します。コンタクトフォームもカスタムポストタイプの一つですので、wp_postsテーブルからpost_typeを指定してコンタクトフォームだけ抽出し、そのpost_idを取得します。

global $wpdb;

// wp_post テーブルから post_type: wpcf7_contact_form だけ抽出
$sql = "SELECT * FROM wp_posts WHERE post_type = 'wpcf7_contact_form'";
$results = $wpdb->get_results($sql);

foreach ($results as $result) {
	$post_id = $result->ID;
	...
}

コンタクトフォームの項目データの取得

コンタクトフォームのデータは、wp_postmetaテーブルに入っていますが、wp_postmetaテーブルのカラムは次のような構造になっています。

【wp_postmetaのテーブルカラム構造】

ID 関連するpostのID キー
meta_id post_id meta_key meta_value

コンタクトフォームの設定画面には「フォーム」「メール」「メッセージ」「その他の設定」というタブがありますが、それぞれ次のキーが使われています。

内容 meta_key
「フォーム」タブの項目 _form
「メール」タブの「メール」の項目 _mail
「メール」タブの「メール (2)」の項目 _mail2
「メッセージ」タブの項目 _messages
「その他の設定」タブの項目 _additional_settings

登録されているメールアドレスの情報を取得する場合は、「meta_key: _mail」の情報を取得すれば良いです。
取得したmeta_valueは、シリアライズ化されたデータ(a:1:{s:6:”active”;})となっていますので、デシリアライズして、変数 $wpcf7_data_mail に代入します。
メールアドレスが入っているのは「recipient」キーであり、$wpcf7_data_mail[‘recipient’] で取り出せます。

あとはそれぞれの目的に応じて自由にデータを利用すれば良いですが、とりあえず、ここでは全てのキーと値を画面に表示してみます。

foreach ($results as $result) {
	$post_id = $result->ID;

	// wp_postmeta テーブルから $post_idに該当し、かつ、meta_key: _mail の行を抽出
	$sql = "SELECT * FROM wp_postmeta WHERE post_id = $post_id AND meta_key = '_mail'";
	$results2 = $wpdb->get_results($sql);

	foreach ($results2 as $result2) {
		$meta_value = $result2->meta_value;
		// 値をデシリアライズ
		$wpcf7_data_mail = unserialize($meta_value);

		// 以下では、とりあえず画面にキーと値をCSV形式で表示する。
		// 1行目にキー情報表示
		if (!$cnt) {
			$str .= 'post_title';
			foreach ($wpcf7_data_mail as $key => $value) {
				$str .= ',' . $key;
			}
			$str .= "<br>\n";
		}

		// 各カラムの値を表示
		$str .= $post_title;
		foreach ($wpcf7_data_mail as $key => $value) {
			$str .= ',' . '"' . $value . '"';
		}
		break;
	}
	$str .= "<br>\n";
	$cnt++;
}

echo $str;

他のタブの項目データを取得するには、meta_keyに別のキーを指定して取得すれば良いです。

まとめ

コードをすべて合わせておきます。

<?php

global $wpdb;

// wp_post テーブルから post_type: wpcf7_contact_form だけ抽出
$sql = "SELECT * FROM wp_posts WHERE post_type = 'wpcf7_contact_form'";
$results = $wpdb->get_results($sql);

foreach ($results as $result) {
	$post_id = $result->ID;

	// wp_postmeta テーブルから $post_idに該当し、かつ、meta_key: _mail の行を抽出
	$sql = "SELECT * FROM wp_postmeta WHERE post_id = $post_id AND meta_key = '_mail'";
	$results2 = $wpdb->get_results($sql);

	foreach ($results2 as $result2) {
		$meta_value = $result2->meta_value;
		// 値をデシリアライズ
		$wpcf7_data_mail = unserialize($meta_value);

		// 以下では、とりあえず画面にキーと値を表示する。
		// 1行目にキー情報表示
		if (!$cnt) {
			$str .= 'post_title';
			foreach ($wpcf7_data_mail as $key => $value) {
				$str .= ',' . $key;
			}
			$str .= "<br>\n";
		}

		// 各カラムの値を表示
		$str .= $post_title;
		foreach ($wpcf7_data_mail as $key => $value) {
			$str .= ',' . '"' . $value . '"';
		}
		break;
	}
	$str .= "<br>\n";
	$cnt++;
}

echo $str;

 

カテゴリー