Ottenere gli ID dei post da WP_Query?
Esiste un modo per recuperare un array di ID dei post dalla seguente query:
$latest = new WP_Query( array (
'orderby' => 'rand', // Ordina in modo casuale
'posts_per_page' => 3 // Limita a 3 post
));
if ( $latest -> have_posts() ) : while ( $latest -> have_posts() ) : $latest -> the_post();
get_template_part( 'templates/content', 'post' ); // Carica il template del post
endwhile; endif; wp_reset_postdata(); // Reimposta i dati del post
Follow Up:
Ho utilizzato wp_list_pluck
per recuperare un array di ID dei post:
$post_ids = wp_list_pluck( $latest->posts, 'ID' ); // Estrae gli ID dai post
Poi ho convertito l'array in una stringa utilizzando la funzione implode:
$post_ids_string = implode( ',', $post_ids ); // Converte in stringa separata da virgole
Scusate per la domanda ambigua.

Utilizza l'argomento fields
nella tua query.
fields (string) - Quali campi restituire. Tutti i campi sono restituiti di
default. Ci sono altre due opzioni: - 'ids' - Restituisce un array di ID dei post. - 'id=>parent' - Restituisce un array associativo [ 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);

Questa dovrebbe essere la risposta accettata in quanto interroga solo gli ID, rendendola molto più veloce rispetto all'interrogazione di tutto e poi al "plucking" (ciclo e ri-archiviazione) in un nuovo array.

Forse hai bisogno di ottenere gli ID DOPO che la normale wp_query è già stata eseguita, ad esempio quando unisci due query successivamente e hai bisogno degli ID per escludere i risultati dalla query precedente.

Grazie per aver condiviso questa soluzione, tra le risposte a questa domanda, questa è la più efficiente.


Ti suggerisco questa soluzione
get_posts([
'posts_per_page' => -1,
'post_status' => 'publish',
'post_type' => 'some-custom-post-type',
'fields' => 'ids',
]);
e come risultato otterrai un array con gli ID all'interno ;)
array (size=5)
0 => int 81002
1 => int 77885
2 => int 77180
3 => int 74722
4 => int 73312

Utilizzare la soluzione di @s-ha-dum è economico se hai solo bisogno di ottenere gli ID e non hai un oggetto query già impostato.
Ecco il motivo:
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.*";
Perché nel caso specifichi solo 'fields' => 'ids'
non otterrai altro che gli ID.
Se usassi 'fields' => 'id=>parent'
(sembra davvero divertente) otterresti anche gli ID dei genitori.
Qualsiasi altro utilizzo dell'argomento 'fields'
non avrà alcun effetto a partire da WordPress v4.7.
Ma nel caso in cui tu abbia la query come nell'esempio, wp_list_pluck
farà il lavoro.

Perché non usare la funzione get_the_ID()? Condivido solo il codice del loop e mostra tutti gli ID dei post nella query.
// Il Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_ID() . '</li>';
}
} else {
// nessun post trovato
$string = "nessun post trovato";
}
