Pesquisando na Tabela Principal
Basta usar WP_User_Query
com um argumento de pesquisa.
Portanto, se você deseja procurar, por exemplo, um usuário com uma palavra-chave em suas user_email
colunas ou colunas semelhantes da {$wpdb->prefix}users
tabela, faça o seguinte:
$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();
Lembre-se de que *
é um curinga. Então, restringindo por exemplo o user_email
a um único domínio iria dar-lhe a seguinte seqüência de pesquisa: *@example.com
.
A search
string possui alguns recursos "mágicos": O search_columns
padrão é ...
user_email
se @
está presente no search
argumento.
user_login
e ID
se o search
argumento for numérico
user_url
se a search
cadeia contiver http://
ouhttps://
- ou ...
user_login
e user_nicename
se uma string estiver presente.
Todos esses padrões são definidos apenas se nenhum search_columns
argumento foi especificado.
Pesquisando na Metabela
Se você quiser pesquisar por, por exemplo , first_name
ou last_name
, será necessário fazer um, meta_query
pois eles não fazem parte da tabela 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();
Certifique-se de recuperar a sequência de pesquisa correta. Normalmente seria get_query_var('s');
, mas poderia - dependendo do seu formulário name/id
, também ser algo diferente que você pode recuperar usando, $_GET['user_search']
por exemplo. Esacpe-o adequadamente e remova os espaços em branco indesejados do início e do fim da string.
Lembre-se de que isso é uma array( array() )
vez que existe a relation
chave. Se você deseja apenas pesquisar uma única chave, pode ser mais fácil seguir o seguinte:
$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
O resultado pode parecer próximo ao seguinte:
$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
seu modelo ou (o que seria melhor) agrupado em um mini-plug-in personalizado para não perder a funcionalidade ao alternar temas.display_name
é uma coluna emwp_users
. Duas perguntas vêm à mente. 1: Esta é uma alteração recente no esquema do banco de dados? 2: ele pode ser usado como um valor emsearch_columns
vez da meta query?Isso me ajudou em vez da resposta do kaiser: https://laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
Mas nesta
$wpdb->escape($usermeta_keys)
função de solução gerou um erro, então eu simplesmente usei$usermeta_keys
.fonte