Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I've written a plugin to allow authentication to a WordPress install via an external API. Everything is working except the first and last names are not being set for the new WordPress user created by the plugin when a login attempt passes the external authentication.

Here's the really strange part: one of the selectable display names is the first and last names coming in from the external API.

$userdata = array( 'user_email' => $ext_user['email'],
                                'user_login' => $ext_user['email'],
                                'first_name' => $ext_user['firstName'],
                                'last_name' => $ext_user['lastName'],
                                'role' => $user_role
                                );
$new_user_id = wp_insert_user( $userdata ); 

$user = new WP_User ($new_user_id);

That's the code I'm using to create the new users. I have logged both $ext_user['firstName'] and $ext_user['lastName'] just before filling the $userdata array to ensure those values are coming through properly and they are. I can't understand how they can be in the Display Name field but the First Name and Last Name fields are blank. Can anyone help?

UPDATE: This install runs the Cimy User Extra Fields plugin. At first, I thought this might be the culprit, but I disabled it and the issue persists. Maybe that's still the problem, but I don't know how to determine. Could this plugin replace the default first and last name fields?

share|improve this question
1  
Do you have access to the database? If yes, are the fields filled with the info? Maybe it is just a problem of listing that info in the dashboard –  K Themes Mar 4 at 19:43
    
@KThemes I just took a look at the database, and it looks like the plugin I mentioned has hijacked the WP first and last name columns. Those don't exist in the user database at all. –  raddevon Mar 4 at 20:47
1  
After wp_insert_user, you could try running update_user_meta( $new_user_id, "first_name", $ext_user['firstName'] ) ; –  czerspalace Mar 4 at 21:54
    
@czerspalace Your solution worked. Not sure why it came to that, but that fixed the problem. If you want to post it as an answer, I'll mark it correct. –  raddevon Mar 5 at 13:21
1  
Maybe, just maybe you have some function hooked in the "pre_user_first_name" filter ($first_name = apply_filters('pre_user_first_name', $first_name);) If you wanna check and be sure if there is any function hooked in there you can use this answer: stackoverflow.com/questions/5224209/… –  K Themes Mar 7 at 11:21

2 Answers 2

up vote 1 down vote accepted

After wp_insert_user, you could try running update_user_meta( $new_user_id, "first_name", $ext_user['firstName'] ) ;

share|improve this answer

This code works when I try it, though it generates an "undefinded variable" error (looks like you should pass a user password). However, there are a number of filters in there that could be used to manipulate the data. including pre_user_first_name and pre_user_last_name. As those fields are "meta" fields, it would also be possible to alter the data via filters run by update_user_meta(). That data is passed through update_metadata() which allows selective filtering.

I can only assume that one or more of those filters are involved in creating this issue.

share|improve this answer
    
That sounds reasonable, but I'm not sure how to act on this information. –  raddevon Mar 5 at 13:17
1  
You will need to search your theme and plugins for callbacks attached to those several hooks, and hopefully locate what is breaking the user insertion. You should not have to run update_user_meta() after wp_insert_user(), as suggested in a comment to the question, because it should have already ran. –  s_ha_dum Mar 5 at 13:42

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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