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

8

Eu preciso criar uma página de pesquisa que mostrará qualquer coisa relacionada à pesquisa fornecida. ou seja, comments contendo, events , posts , CPT s e users com esse nome.

  

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

    
por hannit cohen 03.07.2013 / 12:17

2 respostas

19

Pesquisando na tabela principal

Basta usar WP_User_Query com um argumento de pesquisa.

Portanto, se você quiser pesquisar, por exemplo, um usuário com uma palavra-chave em user_email ou colunas semelhantes da tabela {$wpdb->prefix}users , 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. Portanto, restringir, por exemplo, o user_email a um único domínio forneceria a seguinte string de pesquisa: *@example.com .

A string search tem alguns recursos "mágicos": O search_columns é padronizado para ...

  • user_email if @ está presente no search arg.
  • user_login e ID se o search arg for numérico
  • user_url se a string search contiver http:// ou https://
  • ou ... user_login e user_nicename se uma string estiver presente.

Todos esses padrões são definidos apenas se o argumento no search_columns for especificado.

Pesquisando na tabela meta

Se você quiser pesquisar por exemplo first_name ou last_name , será necessário fazer um meta_query , pois 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 string de pesquisa correta. Normalmente, isso seria get_query_var('s'); , mas poderia - dependendo do seu formulário name/id , bem como algo diferente que você poderia querer recuperar usando $_GET['user_search'] , por exemplo. Certifique-se de divulgá-lo corretamente e remover espaços em branco indesejados do início e do final da sequência.

Lembre-se de que este é um array( array() ) , pois há a chave relation . Se você quiser apenas uma única chave pesquisada, 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();
    
por kaiser 03.07.2013 / 13:22
0

Isso me ajudou em vez da resposta do kaiser: enlace

Mas nesta solução $wpdb->escape($usermeta_keys) function gerou um erro, então eu simplesmente usei $usermeta_keys .

    
por Harkály Gergő 04.08.2017 / 13:07