[wp-trac] [WordPress Trac] #23849: Unexepected results when running WP_User_Query with role and meta_query
WordPress Trac
noreply at wordpress.org
Fri Mar 22 19:48:50 UTC 2013
#23849: Unexepected results when running WP_User_Query with role and meta_query
-----------------------------+--------------------------
Reporter: layotte | Type: defect (bug)
Status: new | Priority: normal
Milestone: Awaiting Review | Component: Query
Version: | Severity: normal
Keywords: dev-feedback |
-----------------------------+--------------------------
There appears to be a couple of bugs in WP_User_Query when doing a role
query and adding additional meta_query options (especially when relation
is set to "OR").
This code:
{{{
$args = array(
'role' => 'Author',
'number' => 100,
'offset' => 0,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_my_key',
'compare' => 'NOT EXISTS',
),
array(
'key' => '_my_key',
'value' => 'off',
'compare' => 'NOT LIKE',
),
),
);
$users = new WP_User_Query( $args );
}}}
Expected results:
Any author where _my_key either does not exist or if it does exists is set
to "off"
Returned results:
All authors and/or all users with _my_key set.
The above generates this SQL:
{{{
SELECT DISTINCT SQL_CALC_FOUND_ROWS wp_users.*
FROM wp_users
INNER JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id
INNER JOIN wp_usermeta AS mt1 ON (wp_users.ID = mt1.user_id)
INNER JOIN wp_usermeta AS mt2 ON (wp_users.ID = mt2.user_id)
WHERE 1=1
AND (wp_usermeta.meta_key = '_pigeonpack_subscription'
OR (mt1.meta_key = '_pigeonpack_subscription' AND
CAST(mt1.meta_value AS CHAR) NOT LIKE '%off%')
OR (mt2.meta_key = 'wp_capabilities' AND CAST(mt2.meta_value AS
CHAR) LIKE '%\"Author\"%') )
ORDER BY user_login ASC LIMIT 100
}}}
This seems like a bug to me, the "Author" meta should not be modified by
the relation => 'OR' argument and thus should not be included in the other
meta query statement. Further, the NOT EXISTS isn't a true NOT EXISTS
statement. In fact, I'm not even sure why the NOT EXISTS statement looks
the way it does. I haven't had too much time to look into this any more in
depth.
I tested this in WP3.5 and Trunk
--
Ticket URL: <http://core.trac.wordpress.org/ticket/23849>
WordPress Trac <http://core.trac.wordpress.org/>
WordPress blogging software
More information about the wp-trac
mailing list