Carregar todos os campos personalizados do WordPress via consulta de banco de dados
Ao recuperar informações do banco de dados do WordPress, prefiro evitar o uso de consultas diretas ao banco de dados, mas há momentos em que elas podem ser úteis (e é importante que seja feito corretamente).
Um caso de uso em que pode ser útil é quando você precisa recuperar um conjunto de dados de um único tipo. Caso em questão: digamos que você precise carregar todos os campos personalizados do WordPress.
No momento da redação deste artigo, não há nenhuma função que eu saiba que fará isso, então aqui está como eu consulto o banco de dados para fazer isso.
Carregar todos os campos personalizados do WordPress
Há várias coisas a serem observadas sobre os campos personalizados associados a uma determinada postagem:
- campos personalizados são armazenados nos metadados do post,
- campos personalizados são considerados privados, então eles são prefixados com um sublinhado,
- os Padrões de Codificação do WordPress não gostarão disso (então você pode precisar ignorar os padrões)
Você pode ler tudo sobre eles no Codex.
E sim, é fácil obter todas as informações personalizadas para uma única postagem. Mas se você estiver trabalhando em um projeto em que precisa recuperar todos os campos personalizados, ou seja, aqueles que são privados, precisará verificar se está consultando strings que começam com um sublinhado.
Então, para carregar todos os campos personalizados do WordPress no banco de dados, aqui está a consulta que uso :
<?php
function get_the_custom_fields() {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"
SELECT meta_key, meta_value
FROM $wpdb->postmeta
WHERE meta_key REGEXP '%s'
", '^[_]') );
return $results;
}
Algumas coisas a serem observadas sobre a consulta acima:
- Estou usando a função prepare antes de get_results. Isso é para parametrização e segurança. Se é novo para você, recomendo a leitura deste artigo.
- Isso retorna todas as meta-chaves e meta-valores em uma matriz,
- Dependendo de quantos registros você deseja retornar, isso pode levar algum tempo (e talvez deva ser feito em lotes).
Finalmente, para quem está curioso, os índices não existem na coluna meta_value, mas sim na coluna meta_key.
As colunas na tabela Post Meta com índices.
Portanto, se você optar por modificar a consulta e quiser usar colunas que tenham índices, consulte meta_id, post_id e meta_key.