Skip to content

Commit 206fb90

Browse files
committed
Support emails in user_login field
Logins can be set to e-mails, and are often set this way. This is fine, until the user changes the e-mail (logins can't be changed). What happens then? `wp user get` doesn't find the user by login, because if the login is an e-mail it shorts to checking only the user_email field. Rectify this. Tests included.
1 parent 1e7f946 commit 206fb90

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

features/user.feature

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,3 +306,19 @@ Feature: Manage WordPress users
306306
http://example.com/?author=1
307307
http://example.com/?author=2
308308
"""
309+
310+
Scenario: Get user with email as login
311+
Given a WP install
312+
And I run `wp user create testuser4@example.com testemail4@example.com`
313+
314+
When I run `wp user get testemail4@example.com --field=user_login`
315+
Then STDOUT should be:
316+
"""
317+
318+
"""
319+
320+
When I run `wp user get testuser4@example.com --field=user_login`
321+
Then STDOUT should be:
322+
"""
323+
324+
"""

src/WP_CLI/Fetchers/User.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ public function get( $id_email_or_login ) {
2222

2323
if ( is_numeric( $id_email_or_login ) )
2424
$user = get_user_by( 'id', $id_email_or_login );
25-
else if ( is_email( $id_email_or_login ) )
25+
else if ( is_email( $id_email_or_login ) ) {
2626
$user = get_user_by( 'email', $id_email_or_login );
27-
else
27+
if ( ! $user ) /** Logins can be emails */
28+
$user = get_user_by( 'login', $id_email_or_login );
29+
} else
2830
$user = get_user_by( 'login', $id_email_or_login );
2931

3032
return $user;

0 commit comments

Comments
 (0)