Uma abordagem possível seria usar um dos métodos auxiliares na classe WPDB para fazer uma consulta baseada em meta mais refinada. A ressalva de usar algumas dessas funções, entretanto, é que você normalmente não recebe de volta uma simples matriz de dados e geralmente precisa fazer referências desnecessárias às propriedades do objeto, mesmo se você estiver chamando apenas uma coluna ou linha.
Naturalmente, nem todas as funções são a mesma e a mesma, e uma menção intencional vai para o método WPDB , get_col
que retorna uma matriz simples e simples dos dados consultados, i faça essa menção especificamente porque o exemplo a seguir vai chamar esse método.
WordPress - WPDB Selecionando uma coluna de dados
$ wpdb- > get_col ( )
Aqui está uma função de exemplo que consulta o banco de dados para todas as postagens de um tipo de postagem escolhido, postar status e com uma meta-chave específica (ou campo personalizado para os menos tecnicamente ocupados).
function get_meta_values( $key = '', $type = 'post', $status = 'publish' ) {
global $wpdb;
if( empty( $key ) )
return;
$r = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = '%s'
AND p.post_status = '%s'
AND p.post_type = '%s'
", $key, $status, $type ) );
return $r;
}
Por exemplo, se você quiser descobrir quais postagens têm uma meta-chave de classificação , para o tipo de postagem filmes e você gostaria de armazenar essa informação dentro de uma variável, um exemplo de tal chamada seria ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
Se você não quisesse fazer nada além de imprimir esses dados para a tela, a função implodir do PHP pode rapidamente unir essa matriz simples em linhas de dados.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Você também pode usar os dados retornados para calcular quantos posts possuem esses meta values, fazendo um loop simples sobre os dados retornados e construindo uma matriz das contagens, por exemplo.
$movie_ratings = get_meta_values( 'rating', 'movies' );
if( !empty( $movie_ratings ) ) {
$num_of_ratings = array();
foreach( $movie_ratings as $meta_value )
$num_of_ratings[$meta_value] = ( isset( $num_of_ratings[$meta_value] ) ) ? $num_of_ratings[$meta_value] + 1 : 1;
}
/*
Result:
Array(
[5] => 10
[9] => 2
)
// ie. there are 10 movie posts with a rating of 5 and 2 movie posts with a rating of 9.
*/
Essa lógica pode ser aplicada a vários tipos de dados e estendida para funcionar de várias formas diferentes. Então, espero que meus exemplos tenham sido úteis e simples o suficiente para seguir.