diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index ce4be5ec33..13cd9a36a4 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -435,6 +435,8 @@ class WP_User_Query { $orderby = 'post_count'; } elseif ( 'ID' == $qv['orderby'] || 'id' == $qv['orderby'] ) { $orderby = 'ID'; + } elseif ( 'meta_value' == $qv['orderby'] ) { + $orderby = "$wpdb->usermeta.meta_value"; } else { $orderby = 'user_login'; } diff --git a/tests/phpunit/tests/user/query.php b/tests/phpunit/tests/user/query.php index e40a8b5d4d..40e758aadd 100644 --- a/tests/phpunit/tests/user/query.php +++ b/tests/phpunit/tests/user/query.php @@ -76,4 +76,29 @@ class Tests_User_Query extends WP_UnitTestCase { $this->assertInstanceOf( 'WP_User', $user ); } } + + function test_orderby() { + $user_ids = $this->factory->user->create_many( 10, array( + 'role' => 'author' + ) ); + + $names = array( 'd', 'f', 'n', 'f', 'd', 'j', 'r', 'p', 'h', 'g' ); + + foreach ( $names as $i => $name ) + update_user_meta( $user_ids[$i], 'last_name', $name ); + + $u = new WP_User_Query( array( + 'include' => $user_ids, + 'meta_key' => 'last_name', + 'orderby' => 'meta_value', + 'fields' => 'ids' + ) ); + $values = array(); + foreach ( $u->get_results() as $user ) + $values[] = get_user_meta( $user, 'last_name', true ); + + sort( $names ); + + $this->assertEquals( $names, $values ); + } }