web-dev-qa-db-fra.com

Obtenir les identifiants de post de WP_Query?

Existe-t-il un moyen de récupérer un tableau d'ID de publication interrogés parmi les suivants:

$latest = new WP_Query( array (
    'orderby'               => 'Rand',
    'posts_per_page'        => 3
));

if ( $latest -> have_posts() ) : while ( $latest -> have_posts() ) : $latest -> the_post();

    get_template_part( 'templates/content', 'post' );

endwhile; endif; wp_reset_postdata();

Suivre:

J'ai utilisé wp_list_pluck pour récupérer un tableau d'identifiants de publication:

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

Puis converti le tableau en chaîne à l'aide de la fonction implode:

$post_ids_string = implode( ',', $post_ids );

Désolé pour la question ambiguë.

24
Rich

Essayer

$post_ids = wp_list_pluck( $latest->posts, 'ID' );

Lire wp_list_pluck

40
shanebp

Utilisez l'argument fields dans votre requête.

fields (string) - Quels champs renvoyer. Tous les champs sont retournés par
défaut. Il existe deux autres options: - 'ids' - Renvoie un tableau d'identifiants post. - 'id => parent' - Retourne un tableau associatif [parent => ID,…].

http://codex.wordpress.org/Class_Reference/WP_Query#Return_Fields_Parameter

$latest = new WP_Query( array (
    'orderby'               => 'Rand',
    'posts_per_page'        => 3,
    'fields' => 'ids'
));
var_dump($latest->posts);
66
s_ha_dum

L'utilisation de la solution de @ s-ha-dum est économique si vous devez uniquement obtenir l'ID et si aucun objet de requête n'a déjà été défini.

Voici pourquoi:

switch ( $q['fields'] ) {
    case 'ids':
        $fields = "$wpdb->posts.ID";
        break;
    case 'id=>parent':
        $fields = "$wpdb->posts.ID, $wpdb->posts.post_parent";
        break;
    default:
        $fields = "$wpdb->posts.*";

Parce que dans le cas où vous ne spécifiez que 'fields' => 'ids', rien ne vous sera plus retourné que l'ID.

Si vous préférez utiliser 'fields' => 'id=>parent' (très drôle), vous obtiendrez également l'identifiant du parent.

Toute autre manière utilisant l'argument 'fields' n'aura aucun impact à partir de WordPress v4.7.

Mais au cas où vous auriez la requête comme dans l'exemple, wp_list_pluck fera le travail.

2
prosti