1

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?

9
  • 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, 2014 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, 2014 at 20:47
  • 1
    After wp_insert_user, you could try running update_user_meta( $new_user_id, "first_name", $ext_user['firstName'] ) ; Mar 4, 2014 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, 2014 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, 2014 at 11:21

2 Answers 2

2

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

1

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.

2
  • That sounds reasonable, but I'm not sure how to act on this information.
    – raddevon
    Mar 5, 2014 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, 2014 at 13:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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