From 9f551a4630955dace852e9e1dd9e52f2e25ae12c Mon Sep 17 00:00:00 2001 From: Boone Gorges Date: Tue, 13 Oct 2015 01:31:53 +0000 Subject: [PATCH] Don't match partial roles in `WP_User_Query`. Because 'role=ocean90' shouldn't match 'role=bocean901'. Props bocean901, ocean90. Fixes #22212. git-svn-id: https://develop.svn.wordpress.org/trunk@35101 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp-user-query.php | 6 +++--- tests/phpunit/tests/user/query.php | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/wp-includes/class-wp-user-query.php b/src/wp-includes/class-wp-user-query.php index 55b284b1b8..8a6a3cf8a4 100644 --- a/src/wp-includes/class-wp-user-query.php +++ b/src/wp-includes/class-wp-user-query.php @@ -304,7 +304,7 @@ class WP_User_Query { foreach ( $roles as $role ) { $roles_clauses[] = array( 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', - 'value' => $role, + 'value' => '"' . $role . '"', 'compare' => 'LIKE', ); } @@ -317,7 +317,7 @@ class WP_User_Query { foreach ( $role__in as $role ) { $role__in_clauses[] = array( 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', - 'value' => $role, + 'value' => '"' . $role . '"', 'compare' => 'LIKE', ); } @@ -330,7 +330,7 @@ class WP_User_Query { foreach ( $role__not_in as $role ) { $role__not_in_clauses[] = array( 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', - 'value' => $role, + 'value' => '"' . $role . '"', 'compare' => 'NOT LIKE', ); } diff --git a/tests/phpunit/tests/user/query.php b/tests/phpunit/tests/user/query.php index 103038dccd..98f63c18c6 100644 --- a/tests/phpunit/tests/user/query.php +++ b/tests/phpunit/tests/user/query.php @@ -955,6 +955,27 @@ class Tests_User_Query extends WP_UnitTestCase { $this->assertEquals( 2, count( $users ) ); } + /** + * @ticket 22212 + */ + public function test_get_single_role_by_string_which_is_similar() { + $editors = $this->factory->user->create_many( 2, array( + 'role' => 'editor', + ) ); + + $another_editor = $this->factory->user->create( array( + 'role' => 'another-editor', + ) ); + + $users = get_users( array( + 'role' => 'editor', + 'fields' => 'ids', + ) ); + + $this->assertEqualSets( $editors, $users ); + } + + /** * @ticket 22212 */