Une approche possible serait d'utiliser l'une des méthodes d'assistance de la classe WPDB pour effectuer une requête méta plus précise. Toutefois, l’utilisation de certaines de ces fonctions a pour inconvénient de ne pas récupérer un simple tableau de données et de devoir faire des références inutiles aux propriétés d’un objet, même si vous n’appelez qu’une colonne ou une ligne.
Bien sûr, toutes les fonctions ne sont pas identiques, et une mention utile va à la méthode WPDB , get_col
qui renvoie un simple tableau plat des données interrogées, j’en fais cette mention spécifiquement parce que l’exemple suivant fera appel à cette méthode. .
WordPress - WPDB Sélection d'une colonne de données
$ wpdb-> get_col ()
Voici un exemple de fonction qui interroge la base de données pour toutes les publications d'un type de publication choisi, d'un statut de publication et avec une clé méta spécifique (ou un champ personnalisé pour les moins avisés du point de vue technique).
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;
}
Ainsi, par exemple, si vous souhaitez savoir quelles publications ont une méta-clé d’ évaluation , pour les films de type publication et que vous souhaitez stocker ces informations dans une variable, un exemple d’un tel appel serait ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
Si vous ne voulez rien faire d’autre que d’imprimer ces données à l’écran, la fonction implode de PHP peut rapidement fusionner ce simple tableau en lignes de données.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Vous pouvez également utiliser les données renvoyées pour déterminer le nombre de publications ayant ces méta-valeurs en effectuant une boucle simple sur les données renvoyées et en créant un tableau des nombres, par exemple.
$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.
*/
Cette logique pourrait être appliquée à divers types de données et étendue pour fonctionner de différentes manières. J'espère donc que mes exemples ont été utiles et simples à suivre.