Buscando en la mesa principal
Simplemente utilícelo WP_User_Query
con un argumento de búsqueda.
Entonces, si desea buscar, por ejemplo, un usuario con una palabra clave en su user_email
columna o columnas similares de la {$wpdb->prefix}users
tabla, 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_email
que un único dominio le daría la siguiente cadena de búsqueda: *@example.com
.
La search
cadena tiene algunas características "mágicas": los search_columns
valores predeterminados para ...
user_email
si @
está presente en el search
argumento
user_login
y ID
si el search
argumento es numérico
user_url
si la search
cadena contiene http://
ohttps://
- o ...
user_login
y user_nicename
si 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_name
o last_name
, entonces tendrá que hacer una, meta_query
ya 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 relation
clave. 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.php
su plantilla o (lo que sería mejor) bien envuelto en un mini plugin personalizado para no perder la funcionalidad al cambiar de tema.display_name
es 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_columns
lugar 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