Cum să obții ID-urile postărilor din WP_Query?
Există vreo metodă prin care pot obține un array cu ID-urile postărilor din următorul query:
$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();
Follow Up:
Am folosit wp_list_pluck
pentru a obține un array cu ID-urile postărilor:
$post_ids = wp_list_pluck( $latest->posts, 'ID' );
Apoi am convertit array-ul într-un string folosind funcția implode:
$post_ids_string = implode( ',', $post_ids );
Îmi cer scuze pentru întrebarea ambiguă.

Folosește argumentul fields
în interogarea ta.
fields (string) - Ce câmpuri să returneze. Toate câmpurile sunt returnate implicit. Există alte două opțiuni: - 'ids' - Returnează un array de ID-uri de postări. - 'id=>parent' - Returnează un array asociativ [ parent => ID, … ].
https://developer.wordpress.org/reference/classes/wp_query/#return-fields-parameter
$latest = new WP_Query( array (
'orderby' => 'rand',
'posts_per_page' => 3,
'fields' => 'ids'
));
var_dump($latest->posts);

Acesta ar trebui să fie răspunsul acceptat, deoarece interoghează doar ID-urile, făcându-l mult mai rapid decât interogarea tuturor datelor și apoi 'extragerea' lor (iterare și re-stocare) într-un nou array.

Poate ai nevoie să obții ID-uri DUPĂ ce o interogare wp_query normală a fost deja executată, de exemplu când unifici două interogări ulterior și ai nevoie de ID-uri pentru a exclude rezultatele din interogarea anterioară.

Vă mulțumesc pentru partajarea acestei soluții, printre răspunsurile la această întrebare, aceasta este cea mai eficientă.


Vă sugerez această soluție
get_posts([
'posts_per_page' => -1,
'post_status' => 'publish',
'post_type' => 'some-custom-post-type',
'fields' => 'ids',
]);
și ca rezultat veți obține un array cu ID-uri în interior ;)
array (size=5)
0 => int 81002
1 => int 77885
2 => int 77180
3 => int 74722
4 => int 73312

Folosirea soluției de la @s-ha-dum este eficientă din punct de vedere economic dacă ai nevoie doar să obții ID-urile și nu ai un obiect de interogare setat anterior.
Iată de ce:
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.*";
Pentru că în cazul în care specifici doar 'fields' => 'ids'
nu vei primi înapoi decât ID-urile.
Dacă ai folosi 'fields' => 'id=>parent'
(pare destul de amuzant) vei obține și ID-urile părinte.
Orice altă modalitate de utilizare a argumentului 'fields'
nu va avea niciun efect începând cu WordPress v4.7.
Dar în cazul în care ai interogarea ca în exemplu, wp_list_pluck
va face treaba.

De ce să nu folosești funcția get_the_ID()? Doar împărtășesc codul loop-ului și acesta afișează toate ID-urile postărilor din interogare.
// Bucla Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_ID() . '</li>';
}
} else {
// nicio postare găsită
$string = "nicio postare găsită";
}
