J'ai cherché pendant un moment mais je n'ai trouvé aucune solution. J'ai utilisé les fonctions listées ici . Il génère quelque chose comme ceci:
Array
(
[0] => 15
[1] => 30
[2] => 50
)
Mais je veux quelque chose comme ça:
Array
(
[post_id_1] => 15
[post_id_2] => 30
[post_id_3] => 50
)
Et voici la requête $ wp utilisée dans la fonction:
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;
}
get_col()
function renvoie une seule colonne sous forme de tableau. Pour obtenir le résultat de deux colonnes, nous pouvons utiliser get_results()
, qui retournera un tableau d'objets
Ce qui peut encore être converti en structure requise en utilisant une boucle foreach.
Exemple -
function get_meta_values( $key = '', $type = 'post', $status = 'publish' ) {
global $wpdb;
if( empty( $key ) )
return;
$r = $wpdb->get_results( $wpdb->prepare( "
SELECT p.ID, 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 ));
foreach ( $r as $my_r )
$metas[$my_r->ID] = $my_r->meta_value;
return $metas;
}
(La version modifiée de votre exemple)
WordPress a la fonction get_metadata this obtient toutes les méta d’objets (Post, terme, utilisateur ...)
Juste utiliser
get_metadata( 'post', 15 );