会員登録(無料)
ログイン
スキルアップは今すぐこちら!▶

【Contact Form7】フォーム送信ボタンと同時にユーザー登録を自動で行う方法

WordPress(ワードプレス)
この記事は約4分で読めます。

例えば、イベントの申込みページなどで、Contact Form7「入力」→「送信」→「ユーザー登録」を同時に完了させたい場合に使える方法です。

フォーム送信時にユーザーデータをインサートする

他にも作られている方がいらっしゃいましたので、参考にさせていただきました。functions.phpなどに追加が必要ですが、下記のコードを追加すると、Contact Form7「入力」→「送信」→「ユーザー登録」が同時に可能です。

関数リファレンス/get userdata

function wpcf7_insert_user($contact_form) {
  $submission = WPCF7_Submission::get_instance();
  if($submission) {
    $formdata = $submission->get_posted_data();
    $userdata = array(
      'user_login'    => $formdata['your-login'],
      'user_email'    => $formdata['your-email'],
      'user_pass'     => $formdata['your-password'],
      'nickname'      => $formdata['your-nickname'],
    );
    $user_id = wp_insert_user($userdata);
  }
}
add_action('wpcf7_mail_sent', 'wpcf7_insert_user', 10, 1);

このままだと簡単にユーザー登録できてしまう点と、ユーザー名やメールアドレスが重複した際、登録できなかった時にどうするか…?という制御が必要そうです。

あとは、フォームに入力項目が無い場合にどうするか?となりますが、一旦仮のユーザー名など設定しておく方法もありかもしれません。

登録するフォームを限定する

上記のコードの場合は全フォームでユーザー登録されるので、フォームを限定します。

function wpcf7_insert_user($contact_form) {
	$id = $contact_form->id();
	if($id == 利用するフォームID) {
		$submission = WPCF7_Submission::get_instance();
		if($submission) {
			$formdata = $submission->get_posted_data();
			$userdata = array(
			    'user_login'    => $formdata['your-login'],
			    'user_email'    => $formdata['your-email'],
			    'user_pass'     => $formdata['your-password'],
			    'nickname'      => $formdata['your-nickname'],
			    'user_hisotry'  => $formdata['your-history']
			);
			$user_id = wp_insert_user($userdata);
			//登録に成功した場合
			if(!is_wp_error($user_id)) {
				//ユーザーメタデータ登録
				update_user_meta($user_id, 'user_history', $formdata['your-history']);
			}
		}
	}
}
add_action('wpcf7_mail_sent', 'wpcf7_insert_user', 10, 1);

これで、登録するフォームを限定することもできます。

まとめ

ContactForm7プラグインがメール送信時フック「wpcf7_mail_sent」という便利なフックを用意してくださっています。こちらを使うと簡単にユーザー登録をさせることができるようになっています。

とはいえ、この方法を使うとContact Form 7プラグインでフォーム送信時にユーザー登録を自動するといったことができます。使い方次第でかなり便利に使えそうですね!

なお、functions.phpを扱うことになるので、バックアップは必ず取っておきましょう😃

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