I am trying to modify a function for WordPress Contact Form 7 user registration from working for one form to multiple forms.
I tried modifying code someone shared online but I am not good enough using php BUT learning! Thank you in advance for some advice.
// create Registration
function create_user_from_registration($cfdata) {
if (!isset($cfdata->posted_data) && class_exists('WPCF7_Submission')) {
// Contact Form 7 version 3.9 removed $cfdata->posted_data and now
// we have to retrieve it from an API
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$formdata = $submission->get_posted_data();
}
} elseif (isset($cfdata->posted_data)) {
// For pre-3.9 versions of Contact Form 7
$formdata = $cfdata->posted_data;
} else {
// We can't retrieve the form data
return $cfdata;
}
// Check this is the user registration form by checking the title
if ( $cfdata->title() == 'Registration: Retailer') {
$password = wp_generate_password( 12, false );
$email = $formdata['email'];
$name = $formdata['username'];
// Construct a username from the user's name
$username = strtolower(str_replace(' ', '', $name));
$name_parts = explode(' ',$name);
if ( !email_exists( $email ) ) {
// Find an unused username
$username_tocheck = $username;
$i = 1;
while ( username_exists( $username_tocheck ) ) {
$username_tocheck = $username . $i++;
}
$username = $username_tocheck;
// Create the user
$userdata = array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'nickname' => reset($name_parts),
'display_name' => $formdata['company'],
'first_name' => $formdata['firstname'],
'last_name' => $formdata['lastname'],
'role' => 'customer'
);
$user_id = wp_insert_user( $userdata );
if ( !is_wp_error($user_id) ) {
// Email login details to user
$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
$message = "Hello! We have received your registration, Your login details are as follows:" . "
";
$message .= sprintf(__('Username: %s'), $username) . "
";
$message .= sprintf(__('Password: %s'), $password) . "
";
$message .= home_url() . "
";
wp_mail($email, sprintf(__('[%s] Your username and password'), $blogname), $message);
}
}
}
return $cfdata;
}
add_action('wpcf7_before_send_mail', 'create_user_from_registration', 1);
the above code will register the user to the website but it only works for one form. I have 3 forms I would like to apply this to. Perhaps elseif for looking at the title. I am too new at this and want to learn.