Come ottenere un array di dati dei post dal risultato di wp_query?
Quando eseguo una query con il metodo WP_Query, ottengo un oggetto. Capisco che posso quindi fare il loop per visualizzare i contenuti. Tuttavia, il mio obiettivo non è visualizzare nulla, ma piuttosto ottenere alcuni dati dei post facendo qualcosa come "foreach...". Come posso ottenere un array di dati dei post attraverso cui posso ciclare e ottenere i dati?

Dovresti leggere la documentazione di riferimento per WP_Query sul codex di WordPress. Lì troverai molti esempi da consultare. Se non vuoi iterare sul set di risultati usando un ciclo while
, puoi ottenere tutti i post restituiti dalla query con la proprietà posts
dell'oggetto WP_Query
.
Ad esempio
$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;
foreach($posts as $post) {
// Fai quello che ti serve, ad esempio
// echo $post->post_name;
}

Nessuno degli esempi che hai linkato mostra come elaborare i post, però. Quindi è positivo che tu abbia risposto, peccato che non sia documentato. Un altro suggerimento: se stai cercando una corrispondenza su un post unico, puoi usare una funzione come questa con 'posts_per_page'=>1
negli argomenti. function wp_queryfirstpost($args) {
$q=new WP_Query($args);
$pp=$q->get_posts();
$firstpost=false;if ($pp) $firstpost=$pp[0];
wp_reset_postdata();
return $firstpost;
}

@rofflox: Sei un santo! Ottimo per aggirare get_the_title/ID/oquellochevuoi.

Dovresti usare $query->posts
invece, $query->get_posts()
attiverà una riesecuzione del parsing della query e ulteriori query al database non necessarie

$query->get_posts(); non funziona come previsto. Non sono sicuro del motivo, ma restituisce meno post rispetto alla query. Vedi qui: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work

Questa risposta è completamente sbagliata. Quando crei una nuova WP_Query con alcuni argomenti, il metodo get_posts() viene chiamato internamente subito e NON DOVRESTI CHIAMARLO DI NUOVO! Se lo chiami nuovamente come mostrato nell'esempio sopra, eseguirà una query DIVERSA, in base agli argomenti e ai risultati della prima esecuzione (flag interni impostati, ecc..), e può potenzialmente restituire un insieme di risultati diverso (più piccolo) o nessun risultato. Come suggerito da TomJNowell e Laxmana sopra, si dovrebbe usare $query->posts per ottenere i dati dei post.

In realtà, non è necessario evitare di utilizzare il ciclo while()
. Lo stesso oggetto WP_Post è già memorizzato nella proprietà post
:
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
// del codice qui se necessario.
while ( $query->have_posts() ) {
$query->the_post();
// ora $query->post è l'oggetto WP_Post, puoi usare:
// $query->post->ID, $query->post->post_title, ecc.
}
}

No, if
non è ridondante. In questo caso specifico lo è, ma nella maggior parte delle situazioni di produzione, hai del codice da eseguire tra l'if e il while.

@magi182 Il che lo rende ridondante, in questo caso specifico. Le persone dovrebbero imparare quando usarlo.

@frodeborli, La cosa bella delle affermazioni che iniziano con "le persone dovrebbero" è che puoi quasi sempre sostituirle con "le persone non lo faranno" e l'affermazione risulta comunque vera.

@magi182 Probabilmente potrei scrivere un centinaio di righe di codice utili per integrare il codice sopra.
