Viewing 6 replies - 1 through 6 (of 6 total)
  • until I batch created some users

    How exactly did you do that?

    Thread Starter fpg

    (@fpg)

    We used a CSV file and looped through using a series of WordPress methods to build the user.

    The only table it touches is the WP User’s table though, which is why it’s confusing that the issue still occurs after we’ve removed those users from the database via phpMyAdmin.

    Thread Starter fpg

    (@fpg)

    I’ve included the function used below. Just FYI, this is all inherited code, I have absolutely no idea why the original author didn’t just use wp_create_user()/wp_insert_user()….

    function ent_insert_user( $userdata ) {
    		/*
    		 * COPIED FROM wp_includes/user.php
    		 * NEED TO ALLOW DUPLICATE EMAIL ADDRESS ON USER IMPORT
    		 * COMMENT OUT DUPE EMAIL CHECK BELOW
    		 */
    		global $wpdb;
    
    		if ( is_a( $userdata, 'stdClass' ) )
    			$userdata = get_object_vars( $userdata );
    		elseif ( is_a( $userdata, 'WP_User' ) )
    		$userdata = $userdata->to_array();
    
    		extract( $userdata, EXTR_SKIP );
    
    		// Are we updating or creating?
    		if ( !empty($ID) ) {
    			$ID = (int) $ID;
    			$update = true;
    			$old_user_data = WP_User::get_data_by( 'id', $ID );
    		} else {
    			$update = false;
    			// Hash the password
    			$user_pass = wp_hash_password($user_pass);
    		}
    
    		$user_login = sanitize_user($user_login, true);
    		$user_login = apply_filters('pre_user_login', $user_login);
    
    		//Remove any non-printable chars from the login string to see if we have ended up with an empty username
    		$user_login = trim($user_login);
    
    		if ( empty($user_login) )
    			return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') );
    
    		if ( !$update && username_exists( $user_login ) )
    			return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) );
    
    		if ( empty($user_nicename) )
    			$user_nicename = sanitize_title( $user_login );
    		$user_nicename = apply_filters('pre_user_nicename', $user_nicename);
    
    		if ( empty($user_url) )
    			$user_url = '';
    		$user_url = apply_filters('pre_user_url', $user_url);
    
    		if ( empty($user_email) )
    			$user_email = '';
    		$user_email = apply_filters('pre_user_email', $user_email);
    
    		/**** GOING TO ALLOW DUPLICATE EMAILS ON THE IMPORT ONLY! ********************
    		if ( !$update && ! defined( 'WP_IMPORTING' ) && email_exists($user_email) )
    			return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) );
    		********************************************************************************/
    
    		if ( empty($nickname) )
    			$nickname = $user_login;
    		$nickname = apply_filters('pre_user_nickname', $nickname);
    
    		if ( empty($first_name) )
    			$first_name = '';
    		$first_name = apply_filters('pre_user_first_name', $first_name);
    
    		if ( empty($last_name) )
    			$last_name = '';
    		$last_name = apply_filters('pre_user_last_name', $last_name);
    
    		if ( empty( $display_name ) ) {
    			if ( $update )
    				$display_name = $user_login;
    			elseif ( $first_name && $last_name )
    			/* translators: 1: first name, 2: last name */
    			$display_name = sprintf( _x( '%1$s %2$s', 'Display name based on first name and last name' ), $first_name, $last_name );
    			elseif ( $first_name )
    			$display_name = $first_name;
    			elseif ( $last_name )
    			$display_name = $last_name;
    			else
    				$display_name = $user_login;
    		}
    		$display_name = apply_filters( 'pre_user_display_name', $display_name );
    
    		if ( empty($description) )
    			$description = '';
    		$description = apply_filters('pre_user_description', $description);
    
    		if ( empty($rich_editing) )
    			$rich_editing = 'true';
    
    		if ( empty($comment_shortcuts) )
    			$comment_shortcuts = 'false';
    
    		if ( empty($admin_color) )
    			$admin_color = 'fresh';
    		$admin_color = preg_replace('|[^a-z0-9 _.\-@]|i', '', $admin_color);
    
    		if ( empty($use_ssl) )
    			$use_ssl = 0;
    
    		if ( empty($user_registered) )
    			$user_registered = gmdate('Y-m-d H:i:s');
    
    		if ( empty($show_admin_bar_front) )
    			$show_admin_bar_front = 'true';
    
    		$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $user_nicename, $user_login));
    
    		if ( $user_nicename_check ) {
    			$suffix = 2;
    			while ($user_nicename_check) {
    				$alt_user_nicename = $user_nicename . "-$suffix";
    				$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $alt_user_nicename, $user_login));
    				$suffix++;
    			}
    			$user_nicename = $alt_user_nicename;
    		}
    
    		$data = compact( 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' );
    		$data = stripslashes_deep( $data );
    
    		if ( $update ) {
    			$wpdb->update( $wpdb->users, $data, compact( 'ID' ) );
    			$user_id = (int) $ID;
    		} else {
    			$wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) );
    			$user_id = (int) $wpdb->insert_id;
    		}
    
    		$user = new WP_User( $user_id );
    
    		foreach ( _get_additional_user_keys( $user ) as $key ) {
    			if ( isset( $$key ) )
    				update_user_meta( $user_id, $key, $$key );
    		}
    
    		if ( isset($role) )
    			$user->set_role($role);
    		elseif ( !$update )
    		$user->set_role(get_option('default_role'));
    
    		wp_cache_delete($user_id, 'users');
    		wp_cache_delete($user_login, 'userlogins');
    
    		if ( $update )
    			do_action('profile_update', $user_id, $old_user_data);
    		else
    			do_action('user_register', $user_id);
    
    		return $user_id;
    	}

    Also, here’s an example data array that would be used as an argument for the above method:

    array('user_login'=>$username,'user_pass'=>$password,'user_nicename'=>$username,'user_email'=>$email,'user_registered'=>$date,'display_name'=>$fullname,'first_name'=>$first_name,'last_name'=>$last_name)

    We used a CSV file and looped through using a series of WordPress methods to build the user.
    The only table it touches is the WP User’s table

    I think that’s where your problems started. Were you aware that may of the tables in WordPress are relational. wp_user and wp_usermeta, for example. Do you have a database backup that was taken before you carried all of this out?

    Thread Starter fpg

    (@fpg)

    I do not actually, but the site is still under development and the only data inside right now is “test data” so it wouldn’t be a devastating loss.

    However, just so I understand the problem, I know that many of the tables are relational, but I have removed references to the extra users from both wp_users and wp_usermeta.

    Would there be other places that I need to clean out before I can fix the Login issues? Seems like if the users don’t exist in wp_users, the extra data for those users floating around in other tables shouldn’t have much of an impact.

    More than saving any sort of test data, I’d just like to understand what’s causing WP to behave this way.

    Thanks for your help!

    You really shouldn’t try messing with the db tables in this manner. The db is probably borked beyond repair now. I’d suggest that you start again with a fresh db and fresh install. And, if you are going to play with the db tables, make a backup before you do anything.

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘"Login Error!" message always appears in login form.’ is closed to new replies.