web-dev-qa-db-fra.com

Comment obtenir une méta-valeur de tout post

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;
}
1
jepser

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)

5
amit

WordPress a la fonction get_metadata this obtient toutes les méta d’objets (Post, terme, utilisateur ...)

Juste utiliser

get_metadata( 'post', 15 );
2
John Henrique