The problem was due to the fact that the query was restructured in this latest update. As pointed out by d79 in this question, the query changed from:
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 ) WHERE 1=1 AND (user_login LIKE 'test' OR user_email LIKE 'test' OR display_name LIKE 'test') OR (
(
(
( wp_usermeta.meta_key = 'first_name' AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%test%' )
OR
( wp_usermeta.meta_key = 'last_name' AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%test%' )
)
AND
mt1.meta_key = 'wp_6_capabilities'
)
) ORDER BY user_login ASC
to
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 ) WHERE 1=1 OR (
(
(
( wp_usermeta.meta_key = 'first_name' AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%test%' )
OR
( wp_usermeta.meta_key = 'last_name' AND CAST(wp_usermeta.meta_value AS CHAR) LIKE '%test%' )
)
AND
mt1.meta_key = 'wp_6_capabilities'
)
) AND (user_login LIKE 'test' OR user_email LIKE 'test' OR display_name LIKE 'test') ORDER BY user_login ASC
Therefore, his function:
add_action('pre_user_query', 'my_custom_users_search');
function my_custom_users_search( $args ) {
if( isset( $args->query_vars['meta_query']['replace_and'] ) && $args->query_vars['meta_query']['replace_and'] )
$args->query_where = str_replace(') AND (', ') OR (', $args->query_where);
}
targeted the correct AND
to be changed to an OR
. His solution fixed the problem for me.