I guess the search part is not working as you expect, because your search columns setup:
'search_columns' => 'user_login',
is within the meta query and therefore not active.
Move it out of the meta query part:
$user_query = WP_User_Query(
[
'search_columns' = [ 'user_login' ], //<-- array of column names
...
]
);
Otherwise the search columns will be user_login
, user_url
, user_email
, user_nicename
and display_name
.
This is the generated SQL query for your current user query:
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 )
INNER JOIN wp_usermeta AS mt3 ON ( wp_users.ID = mt3.user_id )
INNER JOIN wp_usermeta AS mt4 ON ( wp_users.ID = mt4.user_id )
WHERE 1=1
AND
(
(
( wp_usermeta.meta_key = 'user_login'
AND wp_usermeta.meta_value LIKE '%test%' )
AND ( mt1.meta_key = 'referrer' AND mt1.meta_value="25" )
AND ( mt2.meta_key = 'qualified' AND mt2.meta_value="0" )
)
OR
(
( mt3.meta_key = 'passup' AND mt3.meta_value="26" )
AND ( mt4.meta_key = 'user_login' AND mt4.meta_value LIKE '%test%' )
)
)
AND
(
user_login LIKE '%test%'
OR user_url LIKE '%test%'
OR user_email LIKE '%test%'
OR user_nicename LIKE '%test%'
OR display_name LIKE '%test%'
)
ORDER BY user_login ASC
where we notice the multiple OR
in the search part.