例えば、イベントの申込みページなどで、Contact Form7「入力」→「送信」→「ユーザー登録」を同時に完了させたい場合に使える方法です。
フォーム送信時にユーザーデータをインサートする
他にも作られている方がいらっしゃいましたので、参考にさせていただきました。functions.phpなどに追加が必要ですが、下記のコードを追加すると、Contact Form7「入力」→「送信」→「ユーザー登録」が同時に可能です。
[rml_read_more]
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を扱うことになるので、バックアップは必ず取っておきましょう。