Ensure that 'who' param is respected when generating meta_query in WP_User_Query
.
Since [31669], the 'who' param had been parsed after meta_query was generated, so that 'who' was effectively ignored. Props imath. Fixes #32019. git-svn-id: https://develop.svn.wordpress.org/trunk@32207 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
c9774eac69
commit
1a38d95e83
@ -626,15 +626,22 @@ class WP_User_Query {
|
||||
$include = false;
|
||||
}
|
||||
|
||||
// Meta query.
|
||||
$this->meta_query = new WP_Meta_Query();
|
||||
$this->meta_query->parse_query_vars( $qv );
|
||||
|
||||
$blog_id = 0;
|
||||
if ( isset( $qv['blog_id'] ) ) {
|
||||
$blog_id = absint( $qv['blog_id'] );
|
||||
}
|
||||
|
||||
if ( isset( $qv['who'] ) && 'authors' == $qv['who'] && $blog_id ) {
|
||||
$qv['meta_key'] = $wpdb->get_blog_prefix( $blog_id ) . 'user_level';
|
||||
$qv['meta_value'] = 0;
|
||||
$qv['meta_compare'] = '!=';
|
||||
$qv['blog_id'] = $blog_id = 0; // Prevent extra meta query
|
||||
}
|
||||
|
||||
// Meta query.
|
||||
$this->meta_query = new WP_Meta_Query();
|
||||
$this->meta_query->parse_query_vars( $qv );
|
||||
|
||||
$role = '';
|
||||
if ( isset( $qv['role'] ) ) {
|
||||
$role = trim( $qv['role'] );
|
||||
@ -775,13 +782,6 @@ class WP_User_Query {
|
||||
$this->query_where .= $this->get_search_sql( $search, $search_columns, $wild );
|
||||
}
|
||||
|
||||
if ( isset( $qv['who'] ) && 'authors' == $qv['who'] && $blog_id ) {
|
||||
$qv['meta_key'] = $wpdb->get_blog_prefix( $blog_id ) . 'user_level';
|
||||
$qv['meta_value'] = 0;
|
||||
$qv['meta_compare'] = '!=';
|
||||
$qv['blog_id'] = $blog_id = 0; // Prevent extra meta query
|
||||
}
|
||||
|
||||
if ( ! empty( $include ) ) {
|
||||
// Sanitized earlier.
|
||||
$ids = implode( ',', $include );
|
||||
|
@ -625,4 +625,65 @@ class Tests_User_Query extends WP_UnitTestCase {
|
||||
$this->assertSame( array( 'author' ), $user->roles );
|
||||
$this->assertSame( array( 'author' => true ), $user->caps );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 32019
|
||||
*/
|
||||
public function test_who_authors() {
|
||||
if ( ! is_multisite() ) {
|
||||
$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
|
||||
}
|
||||
|
||||
$b = $this->factory->blog->create();
|
||||
$users = $this->factory->user->create_many( 3 );
|
||||
|
||||
add_user_to_blog( $b, $users[0], 'subscriber' );
|
||||
add_user_to_blog( $b, $users[1], 'author' );
|
||||
add_user_to_blog( $b, $users[2], 'editor' );
|
||||
|
||||
$q = new WP_User_Query( array(
|
||||
'who' => 'authors',
|
||||
'blog_id' => $b,
|
||||
) );
|
||||
|
||||
$found = wp_list_pluck( $q->get_results(), 'ID' );
|
||||
|
||||
$this->assertNotContains( $users[0], $found );
|
||||
$this->assertContains( $users[1], $found );
|
||||
$this->assertContains( $users[2], $found );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 32019
|
||||
*/
|
||||
public function test_who_authors_should_work_alongside_meta_query() {
|
||||
if ( ! is_multisite() ) {
|
||||
$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
|
||||
}
|
||||
|
||||
$b = $this->factory->blog->create();
|
||||
$users = $this->factory->user->create_many( 3 );
|
||||
|
||||
add_user_to_blog( $b, $users[0], 'subscriber' );
|
||||
add_user_to_blog( $b, $users[1], 'author' );
|
||||
add_user_to_blog( $b, $users[2], 'editor' );
|
||||
|
||||
add_user_meta( $users[1], 'foo', 'bar' );
|
||||
add_user_meta( $users[2], 'foo', 'baz' );
|
||||
|
||||
$q = new WP_User_Query( array(
|
||||
'who' => 'authors',
|
||||
'blog_id' => $b,
|
||||
'meta_query' => array(
|
||||
'key' => 'foo',
|
||||
'value' => 'bar',
|
||||
),
|
||||
) );
|
||||
|
||||
$found = wp_list_pluck( $q->get_results(), 'ID' );
|
||||
|
||||
$this->assertNotContains( $users[0], $found );
|
||||
$this->assertContains( $users[1], $found );
|
||||
$this->assertNotContains( $users[2], $found );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user