Custom SQL no WordPress

As funções do WordPress são muito úteis e na maioria das vezes o programador não necessita sequer pensar em banco de dados, conexão, select e outros termos que são de uso corrente em uma pesquisa em banco de dados com PHP. Entretanto, mesmo com toda essa facilidade de pesquisa, existem alguns casos em que não é possível escapar de customizar a query para obter os resultados com menor uso de memória e evitar também o timeout da aplicação.

Uma boa referência do que será tratado aqui pode ser visto de forma mais ampla em http://codex.wordpress.org/Class_Reference/wpdb.

Preparei aqui uma busca customizada no banco para pesquisar

$sql = "SELECT wusers.ID,
               wmeta.user_id, 
               wmeta.meta_key, 
               wmeta.meta_value
        FROM 
               $wpdb->users wusers
        INNER JOIN 
               $wpdb->usermeta wmeta
	ON 
                wusers.ID = wmeta.user_id
	WHERE 
                wmeta.meta_key = 'Twitter'
	ORDER BY 
                wmeta.meta_value ASC";

Então estamos pedindo para selecionar os campos ID da tabela users e user_id, meta_key e meta_value da tabela usermeta onde o campo meta_key é igual a Twitter e mandamos ordenar pelo valor. Observe que nesse caso eu estou citando um campo que foi personalizado, mas poderíamos pesquisar por first_name, last_name ou qualquer outro meta_key registrado. Em caso de dúvida consulte o post Melhorando o formulário de cadastro no WordPress.

Tendo a sintaxe SQL, vamos utilizar as funções do próprio WordPress para processar os resultados.

global $wpdb;

$users = $wpdb->get_results($sql);

foreach($users as $user){
  $uinfo = get_userdata($user->ID);  
  echo $uinfo->first_name . " : " . $uinfo->twitter<br />";
}

Com isso podemos gerenciar o cadastro de usuários, podemos fazer uma ficha com foto utilizando o Avatar por meio da função

get_avatar($user->ID);

ou mais completa:

get_avatar( $user->ID, 
            $tamanho = '96', 
            $img_padrao = 'http://www.seusite.com.br/avatar.jpg' )

Também é possível inserir diretamente o link para a imagem

$grav_url = "http://www.gravatar.com/avatar/" . 
             md5(strtolower($user->user_email)) . 
             "?d=" . urlencode($avatar_padrao) . 
             "&s=" . $tamanho;

echo "<img src='$grav_url'/>";

Agora é usar a criatividade e a necessidade para otimizar os seus resultados.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *