「Contact Form 7」でメール送信の直前に入力値や送信先を変更する方法

動作確認:Contact Form 7 Version 4.2.2

「Contact Form 7」でメール送信前に何かの処理を行うには「wpcf7_before_send_mail」フックを利用します。

[参考]
Issue with wpcf7_before_send_mail
CONTACT FORM 7 3.9 ベータ

目次

functions.php に wpcf7_before_send_mail フックを追加

add_filter('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1);

function my_wpcf7_before_send_mail($cf7)
{
	// ここにいろいろ処理を書く
	// code...

    return $cf7;
}

送信先メールアドレスの変更

選択項目によってメールアドレスを切り替えたい場合等に使える。

add_filter('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1);
 
function my_wpcf7_before_send_mail($cf7)
{
	// メール送信に関する情報を取得
	$mail = $cf7->prop('mail');
	
	// メールアドレスの上書き
	$mail['recipient'] = 'sample@yahoo.co.jp';
	
	// 情報を再セット
	$cf7->set_properties( array( 'mail' => $mail ));

    return $cf7;
}

ユーザーが入力した内容を取得する

add_filter('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1);
 
function my_wpcf7_before_send_mail($cf7)
{
	if ( $submission = WPCF7_Submission::get_instance() )
	{
		// 投稿データを取得
	    $posted_data = $submission->get_posted_data();
	}

    return $cf7;
}

ユーザーが入力した内容を変更する

add_filter('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1);
 
function my_wpcf7_before_send_mail($cf7)
{
	if ( $submission = WPCF7_Submission::get_instance() )
	{
		// 投稿データを取得
	    $posted_data = $submission->get_posted_data();
		
		// 件名の変更
		$posted_data['your-subject'] = 'メール件名を入力します';

		// 本文の変更
		$posted_data['your-message'] = 'メール本文を入力します';
		
		// 投稿データを設定
		// ※set_posted_data()はデフォルトでは存在しないのでsubmission.phpに追加する
		$submission->set_posted_data($posted_data);
	}

    return $cf7;
}

以下をsubmission.phpに追記する。
※もしかしたらContactForm7のアップデートの際に消えるかも。(確かめてないです)

public function set_posted_data( $properties ) {
	$defaults = $this->get_posted_data();

	$properties = wp_code_parse_args( $properties, $defaults );
	$properties = array_intersect_key( $properties, $defaults );

	$this->posted_data = $properties;
}

よかったらシェアしてね!

この記事を書いた人

目次
閉じる