【Contact Form 7】セレクトボックスでwordpressユーザーを選択しメールを送信する方法

ContactForm7でユーザー選択してメール送信 Wordpress
ContactForm7でユーザー選択してメール送信

お問い合わせフォームでwordpressのユーザーを選択して、登録されているメールアドレスにメールを送信する方法です。

フォームのテンプレートにセレクトボックスを追加

ユーザー選択してください<span class="red">*</span>
[select* contact-user include_blank]

selectの後ろに「*」をつけることで必須項目になります。
「include_blank」を指定すると選択の初期値が「- – -」となります。

セレクトボックスにwordpressユーザーを追加

function.phpに下記の内容を追加します。

add_filter( 'wpcf7_form_tag', 'custom_wpcf7_form_tag', 11, 2 );
function custom_wpcf7_form_tag( $scanned_tag, $replace ) {
 	
 	$_reset_postdata = false;

	if(!empty($scanned_tag)){
		if($scanned_tag['name'] == 'contact-user')
		{
			$args = array(
				'role' => 'author'
			);
			$users = get_users($args);

			foreach ( $users as $user ) {
				$scanned_tag['values'][] = $user->ID;
				$scanned_tag['labels'][] = $user->display_name;
			}
			$_reset_postdata = true;
		}
	}
	
	if($_reset_postdata)
	{
		wp_reset_postdata();
	}
	return $scanned_tag;
}

get_usersで投稿者(author)の一覧を取得しセレクトボックスに追加しています。

選択したユーザー宛てにメールを送信

function.phpに下記の内容を追加します。

add_action('wpcf7_before_send_mail', 'custom_wpcf7_before_send_mail', 1, 1);
function custom_wpcf7_before_send_mail($cf7)
{
	$submission = WPCF7_Submission::get_instance();
	$data = $submission->get_posted_data();
	
	$user_info = get_userdata($data['contact-user'][0]);
	if($user_info)
	{
		$mail = $cf7->prop('mail');
		
		// 送信先メールアドレスの上書き
		$mail['recipient'] = $user_info->user_email;
		
		$cf7->set_properties( array( 'mail' => $mail ));
	}
	
    return $cf7;
}

該当ユーザーが見つからなければ、送信先は上書きしないのでコンタクトフォームで設定された送信先メールアドレス宛に送信されます。

タイトルとURLをコピーしました