Obtenir des identifiants de publication à partir de WP_Query?

27

Existe-t-il un moyen de récupérer un tableau d'identifiants de messages interrogés à partir des éléments 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_pluckpour récupérer un tableau d'ID de poste:

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

Puis converti le tableau en chaîne en utilisant la fonction imploser:

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

Désolé pour la question ambiguë.

Riches
la source
Rick, votre question est ambiguë. Veuillez être très clair sur ce que vous voulez avant de poster une question. Cela évitera à tout le monde de répondre à des choses non pertinentes. Vous avez en fait besoin que l'ID du message soit renvoyé dans une chaîne, pas dans un tableau
Pieter Goosen
1
Vous wp_reset_postdatadevriez être à l'intérieur et non à l'extérieur de l'instruction if, sinon vous pourriez réinitialiser les données de publication lorsqu'elles n'ont pas été modifiées
Tom J Nowell
1
Si vous ne voulez que les identifiants, vous devriez sérieusement considérer la réponse de s_ha_dum. Cela renverra les ID sans également récupérer de nombreuses autres données de la base de données que vous jeterez ensuite.
Chris Rae

Réponses:

43

Essayer

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

Lis wp_list_pluck

shanebp
la source
5
Cela peut être utile si vous avez également besoin de toutes les données pour chaque publication, et pas seulement des identifiants des publications. Sinon, j'irais avec la solution de @ s-ha-dum.
Marian
74

Utilisez l' fieldsargument dans votre requête.

fields (string) - Quels champs renvoyer. Tous les champs sont retournés par
défaut. Il existe deux autres options: - 'ids' - Retourne un tableau d'ID de publication. - '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);
s_ha_dum
la source
12
Cela devrait être la réponse acceptée car elle interroge uniquement les identifiants, ce qui la rend beaucoup plus rapide que de tout demander et de la `` plumer '' (boucle et re-stockage) dans un nouveau tableau.
Barry Kooij
Vous devrez peut-être obtenir des ID APRÈS que wp_query normal a déjà été exécuté, par exemple lorsque vous fusionnez deux requêtes par la suite et que vous avez besoin d'ID pour exclure les résultats de la requête précédente.
trainoasis
2

L'utilisation de la solution de @ s-ha-dum est économique si vous avez seulement besoin d'obtenir les identifiants et que vous n'avez pas de jeu d'objets de requête précédent.

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 'fields' => 'ids'rien de plus, vous obtiendrez en retour que les ID.

Si vous optez pour 'fields' => 'id=>parent'(l'air vraiment drôle), vous obtiendrez également l'ID parent.

Toute autre façon d'utiliser l' 'fields'argument n'aura aucun impact à partir de WordPress v4.7.

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

prosti
la source