0

The page name with my form is "Register", which means the slug is "register". That is the first piece of info that is tied to my theory about my error.

When I run wp_insert_user I get a success the first time, but the user name is "register". So subsequent submissions try to create the user "register", so it errors out with a "User with that user name exists" error.

I've checked my data over and over again to verify that I'm not submitting a form with the user name "register", but it always tries with that user name.

Here's my code:

$first_name = $data['first_name'];
$last_name = $data['last_name'];
$user_name = $data['user_name'];
$type_of_user = $data['type_of_user'];
$nickname = $first_name . " " . $last_name;
$email = $data['email_address'];
$password = wp_generate_password();

$address1 = $data['address_1'];
$address2 = $data['address_2'];
$city = $data['city'];
$state = $data['state'];
$zipcode = $data['zipcode'];

$user_photo = $data['user_photo'];

$args = array (
        'user_login'        =>  $user_name,
    'user_email'    =>  $email,
    'user_pass'     =>  $password,
    'user_url'      =>  $website,
    'first_name'    =>  $first_name,
    'last_name'     =>  $last_name,
    'nickname'      =>  $nickname,
        'role'                  =>  $type_of_user
) ;

$user_id = wp_insert_user($args);

Could something in the post loop be getting into my form and how do I fix it. I've tried troubleshooting this for awhile now, but I'm not sure what else to try.

EDIT 1: Next test case.

$username = "spock";
$password = wp_generate_password();
$email_address = "spock@blah.com";
if( null == username_exists( $username) ) {

// Generate the password and create the user
$password = wp_generate_password( 12, false );
$user_id = wp_create_user( $username, $password, $email_address );

if ( $user_id && !is_wp_error( $user_id ) ) {

  // Set the nickname
  wp_update_user(
    array(
      'ID'          =>    $user_id,
      'nickname'    =>    $email_address
    )
  );

  // Set the role
  $user = new WP_User( $user_id );
  $user->set_role( 'contributor' );

  // Email the user
  wp_mail( $email_address, 'Welcome!', 'Your Password: ' . $password );
} else {
  wp_mail("my@email.com", "User Reg Error", "Username attempted: " . $username . " . and Error: " . $user_id->get_error_message() . json_encode($user_id));
}

} // end if

This code creates the following on the first run.

New User Created from above code

And then on the next run returns the error of "Sorry, that username already exists!", since it tries to create a user with the username "register" again.

EDIT 2: The Workaround (still need an answer)

The workaround is that I just let it create the user name "register" and then quickly update the user name with the supplied user, but there's no reason why it would be using this user name. Could something be filtering the wp_insert_user function? Is there a WP hook that filters that?

EDIT 3: Tried another page/page slug

I created a new page called "test" with the slug "test" and got the same error so it has nothing to do with that.

  • 1
    I'd do var_dump( $data ) and make sure the data are valid or as expected. And you should also include - in the question - the code which builds the $data - e.g. $data = array(); $data['user_name'] = 'foo'; ... – Sally CJ Aug 30 '18 at 4:40
  • And for debugging let's try the default scenario of creating a user. If that fails, the problem is elsewhere. And what @SallyCJ said, you need to debug your $data also. – Mayeenul Islam Aug 30 '18 at 4:47
  • @RickScolaro, yes, it could be that a plugin or the active theme (custom code/functions in the theme) is filtering the user name and maybe setting/changing it to register. And there are various hooks in the wp_insert_user() function - e.g. pre_user_login and wp_pre_insert_user_data - that you could use to filter the user's data. But perhaps you can add the form code (HTML + PHP) to your question, and we might be able to help you further. – Sally CJ Aug 31 '18 at 2:24
  • The form is actually the Caldera Forms plugin and the run_action processor addon. It passes the $data array to the function. – Rick Scolaro Aug 31 '18 at 18:34
  • @RickScolaro My Caldera form preview, its "Run Action" settings, and the PHP code for the action, and I'm not getting the username issue - the Page slug I used was exactly register. Perhaps that would help you. You could also change the Page slug to register2 or something else than register and see if the issue persists. – Sally CJ Sep 4 '18 at 8:25
0

Before doing anything, make sure that the user account doesn’t already exist. This is really easy to do with the username_exists function.

 if( null == username_exists( $username ) ) {

     echo "user not exist";

 }

use the above code and see what happen

then do as below

$user_id = wp_create_user ( $email_address, $password, $email_address );

all code like

if( null == username_exists( $username) ) {

  // Generate the password and create the user
  $password = wp_generate_password( 12, false );
  $user_id = wp_create_user( $username, $password, $email_address );

  // Set the nickname
  wp_update_user(
    array(
      'ID'          =>    $user_id,
      'nickname'    =>    $email_address
    )
  );

  // Set the role
  $user = new WP_User( $user_id );
  $user->set_role( 'contributor' );

  // Email the user
  wp_mail( $email_address, 'Welcome!', 'Your Password: ' . $password );

} // end if

if even not work than do like below

codes func :-

//function wp_create_user($username, $password, $email = '') {
    //$user_login = esc_sql( $username );
    //$user_email = esc_sql( $email    );
    //$user_pass = $password;

    //$userdata = compact('user_login', 'user_email', 'user_pass');
    //return wp_insert_user($userdata);
   //}

user it will too. use like this codex func.

$user_id = username_exists( $user_name );
if ( !$user_id and email_exists($user_email) == false ) {
    $random_password = wp_generate_password( $length=12, $include_standard_special_chars=false );
    $user_id = wp_create_user( $user_name, $random_password, $user_email );
} else {
    $random_password = __('User already exists.  Password inherited.');
}

i hope its work well

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.