Cum să obții un array de date ale postărilor din rezultatul wp_query?

11 aug. 2012, 07:05:53
Vizualizări: 212K
Voturi: 61

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?

1
Comentarii

O diferență importantă de reținut între accesarea directă a datelor postării și utilizarea etichetelor de șablon este că filtrele nu sunt aplicate datelor și unele funcționalități pot fi afectate.

Milo Milo
30 dec. 2016 20:10:10
Toate răspunsurile la întrebare 3
5
114

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;
}
11 aug. 2012 11:35:25
Comentarii

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; }

Henrik Erlandsson Henrik Erlandsson
21 mar. 2014 11:38:07

@rofflox: Ești un sfânt! Minunat pentru a ocoli get_the_title/ID/younameit.

Vial Vial
30 apr. 2015 20:39:34

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

Tom J Nowell Tom J Nowell
1 nov. 2015 05:31:12

$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

Laxmana Laxmana
12 nov. 2016 19:05:55

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.

ivanhoe ivanhoe
4 dec. 2016 05:20:47
6
17

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.

    }
                
}
1 oct. 2015 22:42:27
Comentarii

if este redundant.

Akkumulator Akkumulator
26 ian. 2017 15:40:27

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 magi182
27 mar. 2017 18:36:32

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

frodeborli frodeborli
3 apr. 2017 21:05:31

@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 magi182
6 apr. 2017 06:28:21

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

frodeborli frodeborli
9 apr. 2017 00:01:09

acesta ar trebui să fie răspunsul ales

bysanchy bysanchy
27 oct. 2018 09:41:53
Arată celelalte 1 comentarii
0

poți folosi și get_posts( $args ) în loc de wp_Query(), ceea ce îți va oferi o listă de articole

16 apr. 2019 12:17:02