Come ottenere un array di dati dei post dal risultato di wp_query?

11 ago 2012, 07:05:53
Visualizzazioni: 212K
Voti: 61

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?

1
Commenti

Un'importante differenza da tenere a mente tra l'accesso diretto ai dati del post rispetto all'uso dei tag template è che i filtri non vengono applicati ai dati e alcune funzionalità potrebbero interrompersi.

Milo Milo
30 dic 2016 20:10:10
Tutte le risposte alla domanda 3
5
114

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;
}
11 ago 2012 11:35:25
Commenti

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

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

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

Vial Vial
30 apr 2015 20:39:34

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

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

$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

Laxmana Laxmana
12 nov 2016 19:05:55

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.

ivanhoe ivanhoe
4 dic 2016 05:20:47
6
17

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.

    }
                
}
1 ott 2015 22:42:27
Commenti

if è ridondante.

Akkumulator Akkumulator
26 gen 2017 15:40:27

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

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

frodeborli frodeborli
3 apr 2017 21:05:31

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

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

frodeborli frodeborli
9 apr 2017 00:01:09

questa dovrebbe essere la risposta scelta

bysanchy bysanchy
27 ott 2018 09:41:53
Mostra i restanti 1 commenti
0

puoi anche utilizzare get_posts( $args ) invece di wp_Query(), che ti restituirà un elenco di articoli

16 apr 2019 12:17:02