WordPress.org

Lingue: English • Français • Italiano • Loop 日本語 Português do Brasil • Русский • 中文(简体) • 中文(Add) • (Aggiungi la tua lingua)

Il Loop è il codice PHP utilizzato da WordPress per visualizzare i messaggi. Utilizzando il ciclo, WordPress elabora ogni post da visualizzare nella pagina corrente e lo formatta in base a come corrisponde ai criteri specificati all’interno dei tag del ciclo. Qualsiasi codice HTML o PHP nel ciclo verrà elaborato su ogni post.

Quando la documentazione di WordPress dice “Questo tag deve essere all’interno del ciclo”, ad esempio per tag o plugin specifici, il tag verrà ripetuto per ogni post. Ad esempio, il ciclo visualizza le seguenti informazioni per impostazione predefinita per ogni post:

  • Titolo (the_title ())
  • Tempo (the_time ())
  • Categorie (the_category ()).

È possibile visualizzare altre informazioni su ciascun post utilizzando i tag modello appropriati o (per utenti avanzati) accedendo alla variabile post post, che viene impostata con le informazioni del post corrente mentre il ciclo è in esecuzione.

Per uno sguardo da principiante al ciclo, vedere Il ciclo in azione.

Usando il Ciclo

Il Ciclo dovrebbe essere inserito nell’indice del Tema.php e in tutti gli altri modelli utilizzati per visualizzare le informazioni post.

Assicurati di includere la chiamata per il modello di intestazione nella parte superiore dei modelli del tuo tema. Se si utilizza Il Ciclo all’interno del proprio disegno (e il vostro proprio disegno è non un modello), impostare WP_USE_THEMES false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

Il ciclo inizia da qui:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

e finisce qui:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Questo è utilizzando PHP sintassi alternativa per le strutture di controllo, e potrebbe anche essere espressa come:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Esempi di Loop

Stile Post Da Qualche Categoria in modo Diverso

in Questo esempio viene visualizzato ogni post con il Titolo (che è un link al Post Permalink), Categorie e Contenuti. Permette anche messaggi in una categoria con categoria ID ‘3’ per essere in stile diverso. A tale scopo, viene utilizzato il tag modello in_category (). Leggi attentamente i commenti per vedere cosa sta facendo ogni parte del codice.

Nota: Tutto il codice HTML deve essere al di fuori del <?php ?> tag. E, il codice PHP (anche le cose semplici come le parentesi graffe: } ) devono essere all’interno di <?php ?> tag. È possibile avviare e arrestare blocchi di codice PHP per intervallare il codice HTML all’interno delle istruzioni if ed else, come mostrato nell’esempio precedente.

Escludi i post da alcune categorie

Questo esempio mostra come nascondere una o più Categorie specifiche dalla visualizzazione. In questo caso, i post delle categorie 3 e 8 sono esclusi. L’esempio è diverso dall’esempio sopra in quanto apporta una modifica alla query stessa.

Nota: se usi questo esempio per la tua pagina principale, dovresti usare un modello diverso per i tuoi archivi di categoria; altrimenti, WordPress escluderà tutti i post nella Categoria 3 e nella Categoria 8, anche quando visualizzi quell’Archivio di categoria! Tuttavia, se si desidera utilizzare lo stesso file di modello, è possibile evitare questo utilizzando il is_home() tag per garantire che i post di Categoria 3 e Categoria 8 solo essere esclusi dalla pagina principale:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

Ci sono altri Tag Condizionali che può essere utilizzato per controllare l’output a seconda se una determinata condizione è vera rispetto alla pagina richiesta.

Object orientation

I loop sono una combinazione di comportamento orientato agli oggetti e globale. Questo è confuso in un primo momento.

Le due importanti variabili globali per i loop sono:

  • $wp_query che è un oggetto della classe WP_Query, contenente un risultato di query del database WP tra cui posts wp_query – > post, un array di singoli WP_POST.
  • post post che è l’oggetto corrente della classe WP_Post

Ricorda: Tutti i tag modello si basano sulla variabile globale post post per impostazione predefinita e la variabile globale post post viene impostata/modificata da the_post(), che ottiene i suoi dati dalla variabile globale w wp_query. post post è anche impostato / modificato da WP_Query:: the_post () come usato nei loop secondari.

Loop multipli

Questa sezione tratta l’uso avanzato del Loop. È un po ‘ tecnico, ma non lasciarti spaventare. Inizieremo con un semplice esempio e lavoreremo da lì. Con un po ‘ di buon senso, pazienza ed entusiasmo, anche tu puoi fare più loop.

Prima di tutto, perché si vorrebbe usare più loop? In generale, la risposta è che potresti voler fare qualcosa con un gruppo di post e fare qualcosa di diverso da un altro gruppo di post, ma visualizzare entrambi i gruppi sulla stessa pagina. “Qualcosa” potrebbe significare quasi tutto; sei limitato solo dalla tua abilità PHP e dalla tua immaginazione.

Entreremo negli esempi qui sotto, ma prima dovresti leggere le basi. Dai un’occhiata al ciclo di base. Consiste di:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

Un po ‘ da parte su Do stuff: in questo esempio è semplicemente un segnaposto per un gruppo di codice che determina come formattare e visualizzare ogni post su una pagina. Questo codice può cambiare a seconda di come vuoi che il tuo WordPress appaia. Se guardi l’indice del tema Kubrick.php la sezione do stuff sarebbe tutto sotto:

<?php while ( have_posts() ) : the_post(); ?>

A sopra:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

Una spiegazione per i programmatori là fuori:have_posts() e the_post() sono wrapper di convenienza attorno all’oggetto globale global wp_query, che è dove si trova tutta l’azione. Il $wp_query viene chiamato nell’intestazione del blog e gli argomenti di query alimentati arrivano tramite GET e PATH_INFO. Il $wp_query prende gli argomenti e costruisce ed esegue una query DB che si traduce in una matrice di messaggi. Questo array è memorizzato nell’oggetto e anche restituito all’intestazione del blog dove è inserito nell’array globale posts posts (per la compatibilità con i vecchi post loop).

Una volta che WordPress ha finito di caricare l’intestazione del blog e sta scendendo nel modello, arriviamo al nostro ciclo post. have_posts() chiama semplicemente in have wp_query->have_posts () che controlla un contatore di loop per vedere se ci sono post rimasti nell’array post. E the_post () chiama the wp_query->the_post () che avanza il contatore di loop e imposta la variabile global post globale e tutti i dati post globali. Una volta esaurito il ciclo, have_posts() restituirà false e abbiamo finito.

Esempi di loop

Di seguito sono riportati tre esempi di utilizzo di loop multipli. La chiave per usare più loop è che w wp_query può essere chiamato solo una volta. Per aggirare questo problema è possibile riutilizzare la query chiamando rewind_posts() o creando un nuovo oggetto query. Questo è coperto nell’esempio 1. Nell’esempio 2, viene coperto l’utilizzo di una variabile per memorizzare i risultati di una query. Infine, “multiple loops in action” riunisce un sacco di idee per documentare un modo di utilizzare più loop per promuovere post di una determinata categoria sulla home page del tuo blog.

Loop multipli Esempio 1

Per eseguire il loop della stessa query una seconda volta, chiamare rewind_posts(). Questo ripristinerà il contatore del ciclo e ti permetterà di fare un altro ciclo.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

Se hai finito con i post nella query originale e vuoi usare una query diversa, puoi riutilizzare l’oggetto w wp_query chiamando query_posts() e quindi eseguire il loop di nuovo. query_posts () eseguirà una nuova query, creerà un nuovo array di post e ripristinerà il contatore di loop.

Se è necessario mantenere la query originale, è possibile creare un nuovo oggetto query.

Multiple Loops Esempio 2

Un’altra versione dell’utilizzo di più Loop richiede un’altra virata per aggirare l’impossibilità di utilizzare have_posts() e the_post(). Per risolvere questo problema, è necessario memorizzare la query originale in una variabile, quindi riassegnarla con l’altro ciclo. In questo modo, è possibile utilizzare tutte le funzioni standard che si basano su tutti i globali.

Per esempio:

Nota: In PHP 5, gli oggetti sono referenziati con l’operatore “= clone” invece di “=” come in PHP 4. Per far funzionare l’esempio 2 in PHP 5 è necessario utilizzare il seguente codice:

Tuttavia, questo secondo esempio non funziona in WordPress 2.1.

Più loop in azione

Il modo migliore per capire come utilizzare più loop è mostrare effettivamente un esempio del suo utilizzo. Forse l’uso più comune di più loop è quello di mostrare due (o più) elenchi di post su una pagina. Questo è spesso fatto quando un webmaster vuole caratterizzare non solo l’ultimo post scritto, ma anche i messaggi da una certa categoria.

Lasciando da parte tutti i problemi di formattazione e CSS, supponiamo di voler avere due elenchi di post. Uno che elenca i post più recenti (i post standard 10 aggiunti più di recente) e un altro che conterrebbe solo un post della categoria “in primo piano”. I post nella categoria “in evidenza” dovrebbero essere mostrati per primi, seguiti dal secondo elenco di post (lo standard). Il problema è che nessun post dovrebbe apparire in entrambe le categorie.

Punto 1. Ottieni solo un post dalla categoria “in primo piano”.

In inglese il codice sopra leggerebbe:

Imposta my my_query uguale al risultato di interrogare tutti i post in cui la categoria è nominata in primo piano e, a proposito, portami solo un post. Inoltre, imposta la variabile do do_not_duplicate uguale al numero ID del singolo post restituito. Ricorda che la riga Do stuff rappresenta tutte le opzioni di formattazione associate al post recuperato.

Si noti che avremo bisogno del valore di do do_not_duplicate nel passaggio successivo per garantire che lo stesso post non appaia in entrambi gli elenchi.

Punto 2. Il secondo ciclo, ottieni gli ultimi post X (tranne uno).

Il seguente codice ottiene X post recenti (come definito nelle preferenze di WordPress) salva quello già visualizzato dal primo ciclo e li visualizza in base alle cose da fare.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

In inglese il codice sopra leggerebbe:

Ottieni tutti i post, dove un post equivale a do do_not_duplicate quindi non fare nulla (continua), altrimenti mostra tutti gli altri post in base a Fare cose. Inoltre, aggiorna la cache in modo che i plugin di tag e parole chiave siano piacevoli. Richiamo, variable do_not_duplicate variabile contiene l’ID del post già visualizzato.

Il risultato finale

Ecco come appare il pezzo finale di codice senza alcuna formattazione:

Il risultato finale sarebbe una pagina con due elenchi. Il primo elenco contiene solo un post-il post più recente della categoria ‘feature’. Il secondo elenco conterrà X post recenti (come definito nelle preferenze di WordPress) tranne il post che è già mostrato nel primo elenco. Quindi, una volta che il post della funzione viene sostituito con uno nuovo, la funzione precedente verrà visualizzata nella sezione elenco post standard sottostante (a seconda del numero di post che si sceglie di visualizzare e della frequenza del post). Questa tecnica (o simile) è stata utilizzata da molti in combinazione con la conoscenza della gerarchia dei modelli per creare un look diverso per la casa.php e indice.PHP. Vedi risorse associate in fondo a questa pagina.

Nota per più post nella prima categoria

Se posts_per_page=2 o più, sarà necessario modificare un po ‘ il codice. La variabile do do_not_duplicate deve essere modificata in un array anziché in un singolo valore. Altrimenti, il primo ciclo finirà e la variabile do do_not_duplicate sarà uguale solo all’id dell’ultimo post. Ciò si tradurrà in messaggi duplicati nel secondo ciclo. Per risolvere il problema sostituire

con

Si noti che “posts_per_page” può essere qualsiasi numero.Questo cambia do do_not_duplicate in un array. Quindi sostituire

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

con

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

Dove si continua il modello per qualsiasi posts_per_page sia impostato uguale a (2 in questo caso).

In alternativa puoi passare l’intero array do do_not_duplicate a w wp_query e verranno restituite solo le voci che corrispondono ai tuoi criteri:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

Si noti che invece di una stringa, il parametro di query era un array associativo che impostava l’opzione post__not_in.

Cicli annidati

Cicli annidati significa che si sta eseguendo un secondo ciclo prima di terminare il primo. Questo può essere utile per visualizzare un elenco di post con un shortcode per esempio.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

È necessario reimpostare i dati del ciclo principale dopo un ciclo nidificato in modo che alcune variabili globali mantengano nuovamente i valori corretti.

Fonti

La sezione sui loop multipli è una combinazione della discussione di Ryan Boren e Alex King sul Loop nella Mailing List degli hacker. L’esempio dei loop nidificati è stato ispirato da un’altra discussione sulla mailing list e da un post di Nicolas Kuttler.

Risorse

  • WordPress WP_Query Generatore
  • entrare In Loop (diapositive) un’introduzione a come plugin e temi che possono modificare il Ciclo
  • WordPress Custom Loop
  • WordPress WP_Query Ciclo Generatore

Related

Per saperne di più circa il Loop di WordPress, e i vari tag di template che funziona solo all’interno del Ciclo, qui ci sono più risorse:

Maggiori informazioni sul Loop

  • Articolo: Il Loop in Azione
  • Articolo: Template Tag
  • Articolo: Utilizzando il ciclo in file di modello

Articoli

  • Articolo: Il ciclo – Una panoramica di base del suo utilizzo di query all’interno del ciclo di WordPress.
  • Articolo: Panoramica delle query-Spiegazione di come determinare quali query generano WordPress.
  • Articolo: Personalizzazione delle query tramite Hook
  • Articolo: Visualizza articoli Query MYSQL utilizzando custom
  • Articolo: Creazione di query avanzate sulle tassonomie
  • Articolo: creazione di query personalizzate utilizzando Offset e impaginazione

Documentazione del codice

  • Classe: WP_Query – Panoramica Dettagliata di classe WP_Query
  • Classe: WP_Comment_Query – Classe di commento-query correlate
  • Classe: WP_User_Query di Classe per l’utente-query correlate
  • Oggetto: $wpdb – Panoramica sull’uso del $wpdb oggetto
  • Funzione: set_query_var()
  • Funzione: get_query_var()
  • Funzione: query_posts() – Creare ulteriori query personalizzata
  • Funzione: get_post() – Prendere un ID di un elemento e restituire i record nel database per l’articolo
  • Funzione: get_posts() – Una specifica funzione che restituisce un array di elementi
  • Funzione: get_pages() – Una specifica funzione che restituisce un array di pagine
  • Funzione: have_posts() – Una condizione che determina se la query ha restituito un articolo
  • Funzione: the_post() – Utilizzato per impostare automaticamente il ciclo dopo una query
  • Funzione: rewind_posts() – Cancella il loop di corrente
  • Funzione: setup_postdata() – consente di impostare i dati per un singolo risultato di una query all’interno di un ciclo
  • Funzione: wp_reset_postdata() – Ripristina la precedente query (di solito dopo un ciclo all’interno di un altro ciclo)
  • Funzione: wp_reset_query()
  • Funzione: is_main_query() – Assicura che la query che è cambiato è solo la query principale
  • Azione Gancio: pre_get_posts – Modificare WordPress query prima di essere eseguiti
  • Azione Gancio: the_post – Modificare l’oggetto post dopo query
  • Filtro Gancio: found_posts – Cambia il valore dell’oggetto found_posts WP_Query
Questo articolo è stato contrassegnato come necessità di modifica. Puoi aiutare Codex modificandolo.

You might also like

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.