Buscando en la mesa principal
Simplemente utilícelo WP_User_Querycon un argumento de búsqueda.
Entonces, si desea buscar, por ejemplo, un usuario con una palabra clave en su user_emailcolumna o columnas similares de la {$wpdb->prefix}userstabla, puede hacer lo siguiente:
$users = new WP_User_Query( array(
'search' => '*'.esc_attr( $your_search_string ).'*',
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
) );
$users_found = $users->get_results();
Tenga en cuenta que *es un comodín. Así, por ejemplo, restringiendo el user_emailque un único dominio le daría la siguiente cadena de búsqueda: *@example.com.
La searchcadena tiene algunas características "mágicas": los search_columnsvalores predeterminados para ...
user_emailsi @está presente en el searchargumento
user_loginy IDsi el searchargumento es numérico
user_urlsi la searchcadena contiene http://ohttps://
- o ...
user_loginy user_nicenamesi hay una cadena presente.
Todos esos valores predeterminados solo se establecen si no search_columns se especificó ningún argumento.
Buscando en la metatabla
Si desea buscar por ejemplo first_nameo last_name, entonces tendrá que hacer una, meta_queryya que no son parte de la tabla principal:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
Asegúrese de recuperar la cadena de búsqueda correcta. Normalmente eso sería get_query_var('s');, pero podría, dependiendo de su forma name/id, también podría ser algo diferente que podría querer recuperar usando, $_GET['user_search']por ejemplo. Asegúrese de cerrarlo correctamente y eliminar el espacio en blanco no deseado desde el principio y el final de la cadena.
Tenga en cuenta que esta es una array( array() )que está la relationclave. Si solo desea que se busque una sola clave, puede ser más fácil simplemente ir con lo siguiente:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_key' => 'first_name',
'meta_value' => $search_string,
'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();
Consulta final
El resultado podría parecerse al siguiente:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'search' => "*{$search_string}*",
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
functions.phpsu plantilla o (lo que sería mejor) bien envuelto en un mini plugin personalizado para no perder la funcionalidad al cambiar de tema.display_namees una columna enwp_users. Dos preguntas me vienen a la mente. 1: ¿Es este un cambio reciente en el esquema de la base de datos? 2: ¿Se puede usar como un valor ensearch_columnslugar de la metaconsulta?Esto me ayudó en lugar de la respuesta de Kaiser: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Pero en esta solución la
$wpdb->escape($usermeta_keys)función generó un error, así que simplemente la usé$usermeta_keys.fuente