Como posso procurar um usuário worpress pelo nome de exibição ou parte dele?

13

Preciso criar uma página de pesquisa que exiba qualquer coisa relacionada à pesquisa fornecida. ou seja, commentscontendo-o, events, posts, CPTS e userscom aquele nome.

Como posso procurar usuários no site cujo nome ou sobrenome contenha a frase de pesquisa?

hannit cohen
fonte

Respostas:

24

Pesquisando na Tabela Principal

Basta usar WP_User_Querycom um argumento de pesquisa.

Portanto, se você deseja procurar, por exemplo, um usuário com uma palavra-chave em suas user_emailcolunas ou colunas semelhantes da {$wpdb->prefix}userstabela, 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_emaila um único domínio iria dar-lhe a seguinte seqüência de pesquisa: *@example.com.

A searchstring possui alguns recursos "mágicos": O search_columnspadrão é ...

  • user_emailse @está presente no searchargumento.
  • user_logine IDse o searchargumento for numérico
  • user_urlse a searchcadeia contiver http://ouhttps://
  • ou ... user_logine user_nicenamese 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_nameou last_name, será necessário fazer um, meta_querypois 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 relationchave. 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();
kaiser
fonte
Em qual arquivo eu quero adicionar esta consulta?
Naveen
@Naveen O melhor ajuste seria o functions.phpseu modelo ou (o que seria melhor) agrupado em um mini-plug-in personalizado para não perder a funcionalidade ao alternar temas.
Kaiser
Kiaser, obrigado pela sua resposta. por favor me ajudar como posso integrar este código para functions.php
Naveen
3
@ Naveen Isso está fora de escopo aqui. Você precisará aprender um pouco sobre código ou encontrar um desenvolvedor para fazer isso por você. E li que Q / A .
Kaiser
display_nameé uma coluna em wp_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 em search_columnsvez da meta query?
precisa saber é o seguinte