0

I am in a situation where I need to import user data from another platform. Because, I have to keep associated userID for some reason, I have to keep user id as it is in the csv. I have tried using wp_insert_user() however, it work only for update and not for the new user if I pass the ID key in params array.

Question:
Is there any way to create users with associated userid in csv file?

2
  • User IDs are set automatically at the database level by MySQL. You can't manually set user IDs with wp_insert_user without potentially causing issues with the state of the database. Depending on what you need the original ID for, you might be better off just storing it as user meta. Aug 4 '20 at 9:06
  • I am migrating another platform data to WordPress. The platform has so many foreign keys that interlinks many tables. If I change the user id, it will be a big trouble for me to import other relational data. Aug 4 '20 at 9:31
0

No, there's no way to do this inside the Wordpress codebase and calls such as wp_insert_user, because as mentioned the user ID is set automatically by the database because the ID field in wp_users is an AUTOINCREMENT field in Wordpress.

Therefore, to do what you want you have a couple of options:

1. Update as you go with a manual SQL statement to change the ID

Insert row by row into wp_users with wp_insert_user, and update the user ID as you go. For example, in pseudocode this would look like:

  • Get a row from your CSV
  • Insert into Wordpress with e.g. wp_insert_user()
  • Get the ID of the new user
  • Run an SQL query to manually change that ID on wp_users table **and making sure it's updated everywhere else such as wp_usermeta, wp_options where WP might have already inserted some rows.

To do this you should probably set the AUTOINCREMENT value on this table to a sensible value that is larger than any of the ID's you will be inserting. This avoids ID collisions.

2. Insert directly into wp_users

You can't insert data directly into wp_users with SQL except you have to understand very well the meaning of all the fields, which is beyond what I can answer here, and for that reason this is tricky and you need to be very careful if you do that. E.g. you can do this:

    insert into wp_users (ID, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_
key, user_status, display_name) 
    values (12345, 'foo', 'bar', 'nicename', 'email@email.com', 'http://url.com', '00-00-00', 'key', 0, 'display_name');

BUT, this is dangerous and complicated because you must figure out for yourself correct values for these fields according Wordpress's internal use of these fields, specifically:

3. Change the ID of the content instead

Change the user ID's in your content instead. A possibly better way to achieve what you want is this:

  • Read a line from your CSV
  • Insert user with e.g. wp_insert_user
  • Get the new WP ID
  • **Record in a list somewhere (e.g. in a new database table) a lookup table of the WP User ID and the old ID from your CSV

Now when you insert any content for this user into Wordpress you can use this lookup table to change the user id field to the correct new Wordpress ID for that user.

This choice is better, even if you already inserted all the content due to the complexity of figuring out everything about how Wordpress processes new users.

Setting the next automatic user ID / AUTOINCREMENT value in wp_users table:

However you're doing what you're doing, you may want to think about changing the ID AUTOINCREMENT field on wp_users to avoid ID collisions. You can do that with:

ALTER TABLE wp_users AUTO_INCREMENT = 1000000; 

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.