Destaque PrincipalDestaque SecundárioWordpress

Escrevendo consultas personalizadas no WordPress

Com consultas personalizadas, você pode fazer qualquer leitura ou manipulação de dados que desejar. Isso abre um mundo de novas possibilidades.

No WordPress, você pode usar consultas SQL para executar uma ampla gama de tarefas no banco de dados do seu site. Alguns exemplos de tarefas que você pode executar usando consultas SQL no WordPress incluem:

  • Inserindo, atualizando e excluindo dados de suas tabelas de banco de dados.
  • Selecionando dados específicos de seu banco de dados e exibindo-os em seu site.
  • Criando e descartando tabelas em seu banco de dados.
  • Modificando a estrutura de suas tabelas de banco de dados, como adicionar ou remover colunas.

Para usar consultas SQL no WordPress, você pode usar o $wpdb objeto global e seus vários métodos, como $wpdb->query(), $wpdb->get_results() e $wpdb->insert(). Você também pode usar o $wpdb->prepare() método para passar dados gerados pelo usuário com segurança para suas consultas SQL.

Precisando de uma hospedagem de site ou de um servidor dedicado personalizado, seja para ambiente de teste, desenvolvimento ou de produção? E com um suporte de especialistas, que ti, ajudam a resolver os problemas o mais rápido possível? A SoloWeb tem o prazer em ti, ajudar com isso. Entre em contato conosco e faça uma cotação agora mesmo, acesse: www.soloweb.com.br.

Por que usar consultas personalizadas?

A funcionalidade básica do WordPress é boa na maioria das vezes, mas o que você faria se tivesse algumas necessidades específicas que ainda não foram atendidas pelos plug-ins existentes? Você está escrevendo seu próprio plugin? Então você deve aprender como usar consultas SQL no WordPress! As referências oficiais podem ser encontradas no WordPress Codex ( Custom Queries e a classe WPDB ).

A classe wpdb

A classe wpdb global do WordPress é a chave para usar consultas personalizadas. Na verdade, quando se trata de executar consultas, quase toda API do WordPress, que precisa buscar dados no banco de dados, acaba usando essa classe em segundo plano. Para usar essa classe, você precisa usar a $wpdb variável global, que é uma instanciação da classe wpdb.

O método query

O método query é usado para executar uma consulta usando a conexão de banco de dados ativa. O primeiro argumento do query método é uma instrução SQL válida. O valor de retorno deste método é um inteiro correspondente ao número de linhas afetadas/selecionadas ou false quando ocorre um erro.

Normalmente, você deseja usar esse método quando deseja recuperar uma contagem de registros. Vamos dar uma olhada no exemplo a seguir para entender como você pode usar esse método.

global $wpdb;

$query = "SELECT COUNT(apple) FROM $wpdb->fruits";
$result = $wpdb->query($query);

Primeiramente, declaramos a $wpdb variável global para podermos usar a classe wpdb. Em seguida, preparamos a instrução SQL e a passamos como o primeiro argumento do método query que executará a consulta e retornará o número de linhas selecionadas ou afetadas.

O método get_results

O método get_results retorna todo o resultado da consulta, que é um array. Cada elemento de um array corresponde a uma linha do resultado.

Vamos dar uma olhada no exemplo a seguir.

global $wpdb;

$query = $wpdb->prepare( "SELECT * FROM $wpdb->wp_terms wt INNER JOIN $wpdb->wp_term_taxonomy wtt ON wt.term_id = wtt.term_id 
WHERE wtt.taxonomy = %s AND wtt.count = %d", array( 'post_tag', 0 ) );

$results = $wpdb->get_results($query);
if (is_array($results) && count($results)) {
    foreach ($results as $row) {
        echo $row['name'];
    }
}

Em primeiro lugar, usamos o método prepare para preparar a consulta SQL para execução segura. Em seguida, passamos a consulta preparada no primeiro argumento do método get_results. Por fim, o método get_results executa a consulta e retorna o resultado como um array.

O método get_var

O método get_var é usado para retornar uma variável do banco de dados e o resultado completo da consulta é armazenado em cache para uso posterior. Ele retorna NULL se não houver resultado.

Vamos dar uma olhada no exemplo a seguir para entender como ele funciona.

global $wpdb;

$query = $wpdb->prepare( "SELECT wt.term_id, wt.name FROM $wpdb->wp_terms wt INNER JOIN $wpdb->wp_term_taxonomy wtt ON wt.term_id = wtt.term_id WHERE wtt.taxonomy = %s AND wtt.count = %d ORDER BY wtt.count DESC", array( 'post_tag', 0 ) );

$results = $wpdb->get_var($query, 1, 0);

O get_varmétodo recebe três argumentos:

  • consulta: a consulta SQL que você deseja executar
  • coluna: o nome da coluna a ser recuperada dos resultados
  • linha: o número da linha específica que você deseja recuperar do conjunto de resultados

No exemplo acima, tentamos recuperar o valor coluna name na primeira linha.

O Método get_row

O método get_row é usado para recuperar uma única linha do banco de dados. Ele retorna NULL quando não há resultado.

global $wpdb;

$query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' );
$row = $wpdb->get_row($query, ARRAY_A, 3);

O método get_row recebe três argumentos:

  • consulta: a consulta SQL que você deseja executar
  • tipo de retorno: um de OBJECT, ARRAY_A, ou ARRAY_N, que correspondem a um objeto stdClass, uma matriz associativa ou uma matriz numérica
  • linha: o número da linha específica que você deseja recuperar do conjunto de resultados


No exemplo acima, tentamos recuperar a quarta linha do conjunto de resultados.

O Método get_col

O método get_col é usado para recuperar a coluna específica do conjunto de resultados. Se o conjunto de resultados contiver apenas uma coluna, ela será retornada. Por outro lado, se o conjunto de resultados contiver mais de uma coluna, ele retornará a coluna específica conforme especificado no segundo argumento.

global $wpdb;

$query = $wpdb->prepare( "SELECT * FROM wp_posts WHERE post_type = %s", 'post' );
$col = $wpdb->get_col($query, 3);

No exemplo acima, tentamos recuperar a quarta coluna do conjunto de resultados.

Consultas Preparadas

De acordo com o manual do php.net:

“Elas [consultas preparadas] podem ser pensadas como uma espécie de modelo compilado para o SQL que um aplicativo deseja executar, que pode ser personalizado usando parâmetros variáveis”.

Uma instrução preparada é uma instrução SQL pré-compilada que pode ser executada várias vezes enviando apenas os dados para o servidor. Ele tem a vantagem adicional de proteger automaticamente os dados usados ​​nos espaços reservados contra ataques de injeção de SQL. Você pode usar uma instrução preparada incluindo espaços reservados em seu SQL.

Resumindo, uma consulta deve ter escape SQL antes de ser executada para evitar ataques de injeção. A classe wpdb fornece o método prepare que permite preparar a consulta SQL para execução segura. Nos exemplos que discutimos até agora, já usamos o prepare método antes de executarmos as consultas SQL.

Vamos dar uma olhada rápida no exemplo a seguir, no qual os valores 10, monkey e apple terão escape quando forem realmente usados ​​na consulta.

// Usage: $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] ); 
global $wpdb;

$wpdb->query( $wpdb->prepare(
    "INSERT INTO $wpdb->test_table (post_id, animal, food) VALUES ( %d, %s, %s )",
    array(
        10,
        'monkey',
        'apple'
    )
));

Definindo mensagens de erro

Você pode ativar e desativar as mensagens de erro do banco de dados com os métodos show_errorse .hide_errors

global $wpdb;

$wpdb->show_errors();
$wpdb->hide_errors();

Controle de Cache

A limpeza do cache de resultados da consulta pode ser feita com o método flush.

global $wpdb;
$wpdb->flush();

Inserindo Dados

Você pode usar o insertmétodo para inserir uma linha na tabela MySQL.

global $wpdb;

$wpdb->insert(
    $wpdb->foods,
    array(
        'fruit' => 'apple',
        'year' => 2012
    ),
    array(
        '%s',
        '%d'
    )
);

O método insert recebe três argumentos:

  • tabela : o nome da tabela
  • data : os dados a inserir (coluna => pares de valores) sem escapar
  • format : uma matriz de formatos a serem mapeados para cada um dos valores em $data – se você não passar nada, todos os valores serão tratados como strings

Atualizando dados

O método update é usado para atualizar uma linha na tabela MySQL.

global $wpdb;

$wpdb->update(
    $wpdb->foods,
    array(
        'fruit' => 'apple',  // string 
        'year' =>  'value2'  // integer (number) 
    ),
    array( 'ID' => 1 ),
    array(
        '%s',   // value1 
        '%d'    // value2 
    ),
    array( '%d' )
);

O método update recebe cinco argumentos:

  • tabela: o nome da tabela.
  • data: os dados a serem atualizados (pares coluna-valor) sem escape.
  • where: where condições na forma de matriz de par chave-valor.
  • formato: uma matriz de formatos a serem mapeados para cada um dos valores em $data. Se você não passar nada, todos os valores serão tratados como strings.
  • format onde: uma matriz de formatos a serem mapeados para cada um dos valores em $where. Se você não passar nada, todos os valores serão tratados como strings.

Informações da coluna

O método get_col_info é usado para recuperar os metadados da coluna da última consulta.

$wpdb->get_col_info('type', 1);

Vamos dar uma olhada nos parâmetros:

  • info_type: o tipo de metadados que você deseja recuperar. Você pode passar qualquer um destes: ‘name’, ‘table’, ‘def’, ‘max_length’, ‘not_null’, ‘primary_key’, ‘multiple_key’, ‘unique_key’, ‘numeric’, ‘blob’, ‘type’, ‘unsigned’, ou ‘zerofill’.
  • col_offset: Especifique a coluna da qual recuperar informações.

Referências as tabelas do WordPress

As tabelas de banco de dados do WordPress podem ser referenciadas na classe wpdb. Isso é muito conveniente, pois os nomes das tabelas podem ser diferentes dos padrões. Aqui está uma lista de referências de tabelas de banco de dados do WordPress:

$wpdb->posts;
$wpdb->postmeta;
$wpdb->comments;
$wpdb->commentmeta;
$wpdb->terms;
$wpdb->term_taxonomy;
$wpdb->term_relationships;
$wpdb->users;
$wpdb->usermeta;
$wpdb->links;
$wpdb->options;

Observe que não precisamos incluir o prefixo. Esse é o benefício aqui, já que a wpdbclasse cuida disso para nós.

É importante observar que o uso de consultas SQL no WordPress requer um entendimento básico de SQL e gerenciamento de banco de dados. Também é importante ter cuidado ao usar consultas SQL, pois o uso indevido pode danificar o banco de dados do seu site.

Esperamos ter ajudado com mais esta dica, e siga nos, nas redes sociais para mais tutoriais, e se precisar de nossa ajuda estamos a disposição: www.soloweb.com.br.

E lembrando que a SOLOWEB além de oferecer Hospedagem de Sites, Servidores Dedicados, Servidores VPS com o menor custo do Brasil, também desenvolve soluções de software e realiza gerenciamento e monitoramento de servidores para sua empresa, faça uma cotação sem custo, acesse: www.soloweb.com.br