Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

Contact Form 7の特別なメールタグをfunctions.phpで追加

4 Comments wordpress,

wordpressでバンドサイトを作る際、ライブチケットのメール予約なんかで、公演日のページから直接メールフォームでチケット予約をさせたい。
僕の場合は、カスタムフィールドに作った公演日、[live_date]の値をContact Form 7で送信したい。

やりたいこと↓

・wordpressのメール送信プラグインContact Form 7で、投稿のカスタムフィールドの値を送信したい。
・Contact Form 7をいじらず、functions.phpだけで対応したい。
(直接contactform7内に書くと、アップデートで消えてしまうから)

まずContact Form 7の管理ページで、メッセージ本文にショートタグ[live_date_check]を追加。

次に、functions.php内に

add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags',10,2);

function my_special_mail_tags($output, $name)
{
	if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) )
		return $output;
	if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) )
		return $output;

	$post_id = (int) $matches[2];
	if ( ! $post = get_post( $post_id ) )
		return $output;
	$name = preg_replace( '/^wpcf7\./', '_', $name );

	if ( 'live_date_check' == $name )
		$output = get_post_meta($post->ID,live_date,true);
	return $output;
}

と記述し、wpcf7_special_mail_tagsをフックする。
(live_dateがカスタムフィールドのキーで、live_date_checkというショートタグで出力)

ついでにメールでのトラブル解決用に、送信元のIPアドレスとUser Agentなんかも仕込んでおけばばっちり。

add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags',10,2);

function my_special_mail_tags($output, $name)
{
	//UAとIPを追加
	if(!isset($re_agent)){ $re_agent = $_SERVER['HTTP_USER_AGENT']; }
	if('user_agent' == $name){ $output = $re_agent; }
	if(!isset($re_addr)){ $re_addr = $_SERVER['REMOTE_ADDR']; }
	if('remote_addr' == $name){ $output = gethostbyaddr($re_addr); }

	//特別なタグを追加
	if ( ! isset( $_POST['_wpcf7_unit_tag'] ) || empty( $_POST['_wpcf7_unit_tag'] ) )
		return $output;
	if ( ! preg_match( '/^wpcf7-f(\d+)-p(\d+)-o(\d+)$/', $_POST['_wpcf7_unit_tag'], $matches ) )
		return $output;

	$post_id = (int) $matches[2];
	if ( ! $post = get_post( $post_id ) )
		return $output;

	$name = preg_replace( '/^wpcf7\./', '_', $name );

	if ( 'live_date_check' == $name )
		$output = get_post_meta($post->ID,live_date,true);
	return $output;
}

込み込みでこんな感じ。

参考(感謝)

WordPress ContactForm7の特別なメールタグを追加する方法
Contact Form 7 でユーザーエージェント