Un possibile approccio sarebbe quello di utilizzare uno dei metodi di supporto nella classe WPDB per eseguire una query meta-based più raffinata. L'avvertenza nell'uso di alcune di queste funzioni, tuttavia, è che di solito non si ottiene indietro una semplice matrice di dati e di solito si devono fare riferimenti inutili alle proprietà degli oggetti, anche se si richiede solo una colonna o riga.
Naturalmente, non tutte le funzioni sono la stessa cosa e una menzione intenzionale va al metodo WPDB , get_col
che restituisce un semplice array piatto dei dati richiesti, faccio questa menzione specificamente perché l'esempio che segue farà appello a questo metodo .
WordPress - WPDB Selezione di una colonna di dati
$ wpdb-> get_col ()
Ecco una funzione di esempio che interroga il database per tutti i post di un tipo di post scelto, lo stato dei post e con una meta chiave specifica (o un campo personalizzato per i meno esperti tecnicamente).
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;
}
Quindi, ad esempio, se ti piace scoprire quali post hanno una meta chiave di valutazione , per i filmati di tipo post e desideri archiviare tali informazioni all'interno di una variabile, un esempio di tale chiamata sarebbe ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
Se non volevi fare altro che stampare quei dati sullo schermo, la funzione di implosione di PHP può rapidamente suddividere quel semplice array in linee di dati.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Puoi anche utilizzare i dati restituiti per capire quanti post hanno questi meta valori facendo un semplice ciclo sui dati restituiti e costruendo una matrice di conteggi, ad esempio.
$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.
*/
Questa logica potrebbe essere applicata a vari tipi di dati ed estesa per funzionare in diversi modi. Quindi spero che i miei esempi siano stati utili e abbastanza semplici da seguire.