1

I'm trying to get the user email for a user by using their username. The information should be for the user whose profile is being viewed, not for the user that's currently logged in.

I tried the code below, but it's not working for me (it's giving me an undefined function error):

$userdata = get_data_by( 'user_nicename' , $rusername );
     if ( !$userdata )
     $rusermail = $userdata->user_email;

Is there any way to get the user's email address from the database with the username that doesn't rely on a string?

Thanks!

0

2 Answers 2

2

Use get_user_by() instead.

get_data_by() is a function of the WP_User class, so you can only use it if you've already got a user object (eg. $user->get_data_by()).

In your case you don't have the user object until you've called this function.

Your updated code would look like:

$userdata = get_user_by( 'user_nicename' , $rusername );
if ( $userdata )
  $rusermail = $userdata->user_email;

Note I've also made an extra change here: if ( $userdata ) rather than if ( !$userdata ). With the exclamation mark, your code to set the e-mail never would have run because you were basically saying if there's no user, set the e-mail.

Additional note: I'm unable to test right now, but some references say to use 'slug' instead of 'user_nicename', so give that a go if the latter doesn't work.

Sign up to request clarification or add additional context in comments.

5 Comments

@TimMalone I'm not getting an error. It's just not pulling anything, so I'm getting an empty link.
@SyrupandSass Did you try it with both 'slug' and 'user_nicename'?
Yep. I even tried using an if-else statement, and it just gives me the 'else' results.
@SyrupandSass You might need to do a little more debugging then - check what the value of $rusername is, make sure it exactly matches a user_nicename in the database, etc. I just reviewed the WP_User class and I'm 99% sure it should work...
For what it's worth, I'd recommend a var_dump($userdata) right BEFORE the if statement, just AFTER the $userdata = get_user_by(...) statement
2

I figured out the answer today. Or, this is what finally worked for me:

global $wpdb;
          $mytable     = $wpdb->prefix . "table_name";
          $mylink = $wpdb->get_row( "SELECT * FROM $mytable WHERE user_login = '$rusername'" );
          $sender = get_user_by( 'ID', $mylink->ID ); 
          $rusermail = $sender->user_email;

Comments

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.