Cum să obții un array de date ale postărilor din rezultatul wp_query?
Când rulez o interogare cu metoda WP_Query, obțin un obiect. Înțeleg că pot face loop pentru a afișa lucruri. Dar scopul meu nu este să afișez nimic, în schimb, vreau să obțin anumite date ale postării făcând ceva de genul "foreach...". Cum pot obține un array de date ale postărilor prin care să pot itera și să obțin datele?

Ar trebui să citești referința pentru funcția WP_Query în codex-ul WordPress. Acolo găsești o mulțime de exemple pe care le poți studia. Dacă nu dorești să parcurgi setul de rezultate folosind o buclă while
, poți obține toate articolele returnate de interogare prin proprietatea posts
din WP_Query
.
De exemplu
$query = new WP_Query( array( 'post_type' => 'page' ) );
$posts = $query->posts;
foreach($posts as $post) {
// Fă ce ai de făcut, de exemplu:
// echo $post->post_name;
}

Niciunul dintre exemplele la care faci referință nu demonstrează cum să procesezi postări, totuși. Așadar, e bine că ai răspuns, păcat că nu au asta în documentație. Un alt sfat: Dacă faci o potrivire pe o postare unică, poți folosi o funcție ca aceasta cu 'posts_per_page'=>1
în args. 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: Ești un sfânt! Minunat pentru a ocoli get_the_title/ID/younameit.

Ar trebui să folosești $query->posts
în loc, $query->get_posts()
va declanșa o re-executare a analizei interogării și interogări suplimentare inutile la baza de date

$query->get_posts(); nu funcționează așa cum era de așteptat. Nu sunt sigur de ce, dar returnează mai puține articole decât query-ul. Vezi aici: https://stackoverflow.com/questions/25395299/how-do-i-get-wordpress-wp-query-get-posts-on-multiple-categories-to-work

Acest răspuns este pur și simplu greșit, atunci când creezi un nou WP_Query cu niște argumente, metoda get_posts() este apelată intern imediat și NU TREBUIE SĂ O APELEZI DIN NOU! Dacă o apelezi din nou așa cum se arată în exemplul de mai sus, va rula un ALT query, în funcție de argumente și rezultatele din rularea inițială (steaguri interne setate etc.), și poate returna un set diferit (mai mic) de rezultate sau niciun rezultat deloc. După cum au sugerat TomJNowell și Laxmana mai sus, ar trebui să folosești $query->posts pentru a obține datele postărilor.

De fapt, nu este nevoie să eviți utilizarea buclei while()
. Același obiect WP_Post este deja stocat în proprietatea post
:
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
// aici poți adăuga cod dacă dorești.
while ( $query->have_posts() ) {
$query->the_post();
// acum $query->post este obiect WP_Post, poți folosi:
// $query->post->ID, $query->post->post_title, etc.
}
}

Nu, if
nu este redundant. În acest caz exact este, dar în majoritatea situațiilor din producție, ai cod de executat între if și while.

@magi182 Ceea ce îl face redundant, în acest caz exact. Oamenii ar trebui să învețe când să folosească asta.

@frodeborli, Frumusețea afirmațiilor care încep cu „oamenii ar trebui” este că poți aproape întotdeauna să le înlocuiești cu „oamenii nu vor” și afirmația încă rămâne adevărată.

@magi182 Aș putea probabil să scriu o sută de linii de cod dorite pentru a completa codul de mai sus.
