Qual é a maneira mais eficiente de pesquisar usuários pelo nome de exibição?

4

Inicialmente, pensei em usar get_users() , mas não suportava o campo display_name. Então eu li sobre o uso de WP_User_Query, mas quando eu faço isso sempre esgota o tamanho de memória permitido de 134217728 bytes. Quando eu removo o limite de memória, esta parte da página nem sequer tenta carregar. Agora estou pensando em executar uma função que adiciona o display_name de todos à meta do usuário para que eu possa usar get_users() novamente. É uma boa ideia?

Meu objetivo é fazer a pesquisa também classificar por relevância e planejo fazer isso usando explode(' ', $search_query) , em seguida, chamar get_users() para cada elemento na matriz e, em seguida, combinar e classificar os resultados por ocorrência, como mostrado aqui: enlace e não tenho certeza se isso vai ser eficiente em termos de memória.

Obrigado pela leitura.

    
por Nadroev 20.05.2015 / 10:40

2 respostas

2

Acho que você deve usar a turma padrão para este trabalho - WP_User_Query . A consulta tem muitas possibilidades, também obtém o nome de exibição. WP_User_Query é uma classe que permite consultar tabelas do banco de dados do WordPress _users e _usermeta .

Também é útil quando você usa um cache para os valores. Também aqui eu prefiro os padrões do WordPress WP_Cache (Cache Não Persistente) ou API transitória (Cache Persistente Temporariamente Baseado em Banco de Dados).

O exemplo abaixo demonstrará isso com WP_Cache, você também pode fazer isso com transientes. O código não vai funcionar, é só escrever pelo zero para ilustrar.

function wpse_get_user_data( $args ) {


    if ( ! $user_query = wp_cache_get( $args->ID, 'your_key' ) ) {
        $user_query = array();
        $user_query = new WP_User_Query( $args );

        wp_cache_add( $args-ID, $user_query, 'your_key' );
    }

    return $user_query;
}
    
por bueltge 20.05.2015 / 14:25
1

Se você enviar uma "pesquisa" por meio de WP_User_query , pesquisará os campos user_login e user_nicename . Isso produz uma consulta de fato ineficiente OR . Você pode reduzir isso usando um filtro para forçar a pesquisa somente ao campo user_nicename .

add_filter('user_search_columns','nicename_only_wpse_188846');

function nicename_only_wpse_188846($search_columns) {
  return array('user_nicename');
}

$args = array(
  'search' => 'abce',
);

// The Query
$user_query = new WP_User_Query( $args );
var_dump($user_query);

Combine isso com o cache e você pode ter uma chance.

Dito isso, 134217728 bytes é muito pequeno se você tiver muitos usuários e tráfego. Você pode precisar apenas de uma atualização do servidor.

    
por s_ha_dum 20.05.2015 / 17:16