Cosa fa setup_postdata($post)?

15 mag 2013, 22:34:13
Visualizzazioni: 25K
Voti: 19

Il codex lo definisce come 'Imposta i dati globali del post. Aiuta a formattare i risultati delle query personalizzate per l'utilizzo dei Tag dei Template.' Cerchiamo di capire meglio cosa significa.

Ecco un esempio di codice:

global $post;
$args = array( 'numberposts' => -1);
$posts = get_posts($args);
foreach( $posts as $post) : setup_postdata($post);
echo $post->ID;
endforeach; 

setup_postdata($post) è una funzione fondamentale quando si lavora con loop personalizzati in WordPress. Essa compie diverse azioni importanti:

1. Inizializza le variabili globali necessarie per far funzionare correttamente le funzioni template di WordPress (come the_title(), the_content(), etc.)

2. Prepara i dati del post corrente per l'utilizzo con le funzioni template standard di WordPress

3. Configura il contesto globale in modo che WordPress sappia quale post sta attualmente elaborando

Senza setup_postdata(), molte funzioni template di WordPress non funzionerebbero correttamente all'interno di un loop personalizzato, poiché non avrebbero accesso ai dati del post necessari nel formato corretto.

0
Tutte le risposte alla domanda 1
0
21

Le funzioni dei tag template si basano su variabili globali per accedere al post in elaborazione e recuperare dati da esso o relativi ad esso.

La variabile principale tra queste è $post, che contiene l'oggetto post stesso.

Nel tuo esempio non è esplicito, ma ciò che accade è che il tuo ciclo assegna dati a $post. Se il suo nome non fosse $post, dovresti specificarlo esplicitamente (global $post; $post = $some_other_post;).

Tuttavia, ci sono molte altre variabili globali e lo scopo di setup_postdata() è riempirle con i dati. Se guardi il codice sorgente, queste sono:

global $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages;

Nota che nella maggior parte dei casi dovresti chiamare wp_reset_postdata() successivamente per riportare le variabili globali al loro stato originale.

15 mag 2013 22:40:16