WordPress.org

Limbi: engleză • Franceză • Italiană • Bucla 日本語 Português do Brasil • Русский • 中文(简体) • 中文(繁體) • (Adăuga limba dvs.)

Bucla este cod PHP folosit de WordPress pentru a afișa mesajele. Folosind bucla, WordPress procesează fiecare postare pentru a fi afișată pe pagina curentă și o formatează în funcție de modul în care se potrivește criteriilor specificate în etichetele buclei. Orice cod HTML sau PHP din buclă va fi procesat pe fiecare postare.

când documentația WordPress spune „această etichetă trebuie să fie în buclă”, cum ar fi pentru anumite etichete de șablon sau pluginuri, eticheta va fi repetată pentru fiecare postare. De exemplu, bucla afișează în mod implicit următoarele informații pentru fiecare postare:

  • Titlu (the_title ())
  • timp (the_time ())
  • Categorii (The_category ()).

puteți afișa alte informații despre fiecare postare utilizând etichetele de șablon corespunzătoare sau (pentru utilizatorii avansați) accesând variabila $post, care este setată cu informațiile postării curente în timp ce bucla rulează.

pentru o privire incepator la bucla, a se vedea bucla în acțiune.

folosind bucla

bucla trebuie plasată în indexul temei.php și în orice alte șabloane utilizate pentru a afișa informații post.

asigurați-vă că includeți apelul pentru șablonul de antet în partea de sus a șabloanelor temei. Dacă utilizați bucla în interiorul propriului design (și propriul design nu este un șablon), setați wp_use_themes la false:

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

bucla începe aici:

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

și se termină aici:

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

aceasta folosește sintaxa alternativă PHP pentru structurile de control și ar putea fi exprimată și ca:

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

Exemple de buclă

postări de stil dintr-o categorie diferit

acest exemplu afișează fiecare postare cu titlul său (care este folosit ca link către legătura permanentă a postării), categorii și conținut. De asemenea, permite postărilor dintr-o categorie cu ID-ul categoriei ‘3’ să fie stilate diferit. Pentru a realiza acest lucru, se utilizează eticheta șablon In_category (). Citiți cu atenție comentariile pentru a vedea ce face fiecare parte a codului.

notă: tot codul HTML trebuie să fie în afara <?php ?> etichete. Și, cod PHP (chiar și lucruri la fel de simplu ca acolade buclat: } ) trebuie să fie în interiorul <?php ?> etichete. Puteți porni și opri blocurile de cod PHP pentru a intercala codul HTML în instrucțiunile if and else, așa cum se arată în exemplul de mai sus.

excludeți postările dintr-o categorie

acest exemplu demonstrează cum să ascundeți afișarea unei anumite categorii sau categorii. În acest caz, postările din categoriile 3 și 8 sunt excluse. Exemplul este diferit de exemplul de mai sus prin faptul că face o modificare a interogării în sine.

Notă: Dacă utilizați acest exemplu pentru pagina principală, ar trebui să utilizați un șablon diferit pentru arhivele dvs. de categorii; în caz contrar, WordPress va exclude toate postările din categoria 3 și categoria 8, chiar și atunci când vizualizați Arhiva categoriei respective! Cu toate acestea, dacă doriți să utilizați același fișier șablon, puteți evita acest lucru utilizând eticheta is_home() pentru a vă asigura că postările din categoria 3 și categoria 8 vor fi excluse numai din pagina principală:

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

există și alte etichete condiționale care pot fi utilizate pentru a controla ieșirea în funcție de dacă o anumită condiție este adevărată sau nu în ceea ce privește pagina solicitată.

orientare obiect

buclele sunt o combinație de comportament orientat obiect și global. Acest lucru este confuz la început.

cele două variabile globale importante pentru bucle sunt:

  • $wp_query care este un obiect de clasă WP_Query, care deține un rezultat de interogare a bazei de date WP printre care $ WP_Query – >posturi, o serie de wp_posts individuale.
  • $post care este obiectul curent al clasei WP_Post

amintiți-vă: toate etichetele șablonului se bazează implicit pe variabila globală $post și variabila globală $post este setată/modificată de the_post(), care își primește datele din variabila globală $wp_query. $post este, de asemenea, setat/modificat de WP_Query::the_post() așa cum este utilizat în buclele secundare.

bucle Multiple

această secțiune tratează utilizarea avansată a buclei. Este un pic tehnic, dar nu lăsa asta să te sperie. Vom începe cu un exemplu ușor și vom lucra de acolo. Cu puțin bun simț, răbdare și entuziasm, și tu poți face mai multe bucle.

în primul rând, de ce ar vrea cineva să folosească mai multe bucle? În general, răspunsul este că ați putea dori să faceți ceva cu un grup de postări și să faceți ceva diferit față de un alt grup de postări, dar afișați ambele grupuri pe aceeași pagină. „Ceva” ar putea însemna aproape orice; tu sunt limitate doar de calificare PHP și imaginația ta.

vom intra în exemplele de mai jos, dar mai întâi ar trebui să citiți despre elementele de bază. Aruncați o privire la bucla de bază. Se compune din:

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

un pic deoparte pe Do stuff: în acest exemplu este pur și simplu un substituent pentru o grămadă de cod care determină modul de formatare și afișare a fiecărei postări pe o pagină. Acest cod se poate schimba în funcție de modul în care doriți să arate WordPress-ul dvs. Dacă te uiți la indexul temei Kubrick.php secțiunea do stuff ar fi totul mai jos:

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

pentru mai sus:

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

o explicație pentru coderii de acolo:have_posts() și the_post() sunt ambalaje convenabile în jurul obiectului global $WP_Query, care este locul în care se află toată acțiunea. $Wp_query este numit în antetul blogului și argumentele de interogare fed care vin prin GET și PATH_INFO. $Wp_query ia argumentele și construiește și execută o interogare DB care are ca rezultat o serie de posturi. Această matrice este stocată în obiect și, de asemenea, a revenit înapoi la antetul blog-ul în cazul în care acesta este umplut în Global $posturi matrice (pentru compatibilitate cu bucle post vechi).

odată ce WordPress a terminat de încărcat antetul blogului și coboară în șablon, ajungem la bucla noastră de postare. Have_posts () pur și simplu solicită în $WP_Query->have_posts () care verifică un contor de buclă pentru a vedea dacă există posturi rămase în matrice mesaj. Și the_post() solicită $wp_query->the_post () care avansează contorul de buclă și stabilește variabila globală $post, precum și toate datele globale post. Odată ce am epuizat bucla, have_posts () va reveni false și am terminat.

Exemple de buclă

mai jos sunt trei exemple de utilizare a mai multor bucle. Cheia pentru utilizarea mai multor bucle este că $wp_query poate fi apelat o singură dată. Pentru a evita acest lucru, este posibil să reutilizați interogarea apelând rewind_posts() sau creând un nou obiect de interogare. Aceasta este prezentată în exemplul 1. În exemplul 2, este acoperită utilizarea unei variabile pentru a stoca rezultatele unei interogări. În cele din urmă, ‘bucle multiple în acțiune’ aduce o grămadă de idei împreună pentru a documenta o modalitate de a utiliza mai multe bucle pentru a promova postări dintr-o anumită categorie pe pagina de pornire a blogului dvs.

bucle Multiple Exemplul 1

pentru a trece prin aceeași interogare a doua oară, apelați rewind_posts(). Aceasta va reseta contorul de buclă și vă va permite să faceți o altă buclă.

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

dacă ați terminat cu postările din interogarea originală și doriți să utilizați o interogare diferită, puteți reutiliza obiectul $wp_query apelând query_posts() și apoi înapoi. Query_posts () va efectua o nouă interogare, va construi o nouă matrice de postări și va reseta contorul de buclă.

dacă trebuie să păstrați interogarea originală în jur, puteți crea un nou obiect de interogare.

bucle Multiple Exemplul 2

o altă versiune a utilizării mai multor bucle are o altă abordare pentru a evita incapacitatea de a utiliza have_posts() și the_post(). Pentru a rezolva acest lucru, trebuie să stocați interogarea originală într-o variabilă, apoi să o re-atribuiți cu cealaltă buclă. În acest fel, puteți utiliza toate funcțiile standard care se bazează pe toate globalele.

de exemplu:

notă: în PHP 5, obiectele sunt referite cu operatorul „= clone” în loc de „=” ca în PHP 4. Pentru ca exemplul 2 să funcționeze în PHP 5, trebuie să utilizați următorul cod:

cu toate acestea, acest al doilea exemplu nu funcționează în WordPress 2.1.

mai multe bucle în acțiune

cel mai bun mod de a înțelege cum să utilizați mai multe bucle este de a arăta de fapt un exemplu de utilizare a acestuia. Poate că cea mai obișnuită utilizare a mai multor bucle este de a afișa două (sau mai multe) liste de postări pe o singură pagină. Acest lucru se face adesea atunci când un webmaster dorește să prezinte nu numai cea mai recentă postare scrisă, ci și postări dintr-o anumită categorie.

lăsând deoparte toate problemele de formatare și CSS, să presupunem că vrem să avem două liste de postări. Una care ar Lista cele mai recente postări (cele 10 postări standard adăugate cel mai recent) și alta care ar conține o singură postare din categoria ‘recomandate’. Postările din categoria ‘recomandate’ ar trebui să fie afișate mai întâi, urmate de a doua listă de postări (standardul). Captura este că nici un post ar trebui să apară în ambele categorii.

Pasul 1. Obțineți o singură postare din categoria ‘recomandate’.

în limba engleză codul de mai sus ar citi:

Set $my_query egal cu rezultatul interogării tuturor postărilor în care categoria este numită prezentată și, apropo, adu-mi doar o postare. De asemenea, setați variabila $do_not_duplicate egală cu numărul de identificare al postului unic returnat. Amintiți-vă că linia do stuff reprezintă toate opțiunile de formatare asociate pentru postarea preluată.

rețineți că vom avea nevoie de valoarea $do_not_duplicate în pasul următor pentru a ne asigura că aceeași postare nu apare în ambele liste.

Pasul 2. A doua buclă, pentru a primi cele mai recente X posturi (cu excepția unuia).

următorul cod primește x postări recente (așa cum sunt definite în preferințele WordPress) salvați-l pe cel deja afișat din prima buclă și le afișează în funcție de Do stuff.

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

în limba engleză codul de mai sus ar citi:

obține toate posturile, în cazul în care un post este egal cu $do_not_duplicate apoi face doar nimic (continua), altfel afișa toate celelalte posturi în funcție de a face lucruri. De asemenea, actualizați memoria cache, astfel încât pluginurile de etichetare și cuvinte cheie să se joace frumos. Reamintim, $ do_not_duplicate variabila conține ID-ul postului deja afișat.

rezultatul final

Iată cum arată ultima bucată de cod fără nicio formatare:

rezultatul final ar fi o pagină cu două liste. Prima listă conține o singură postare – cea mai recentă postare din categoria ‘feature’. A doua listă va conține x postări recente (așa cum sunt definite în preferințele WordPress), cu excepția postării care este deja afișată în prima listă. Deci, odată ce postarea caracteristică este înlocuită cu una nouă, funcția anterioară va apărea în secțiunea standard a listei de postări de mai jos (în funcție de câte postări alegeți să afișați și de frecvența postării). Această tehnică (sau similară) a fost folosită de mulți împreună cu cunoașterea ierarhiei șabloanelor pentru a crea un aspect diferit pentru casă.php și index.php. A se vedea resursele asociate în partea de jos a acestei pagini.

Notă Pentru mai multe postări din prima categorie

dacă posts_per_page=2 sau mai multe, va trebui să modificați puțin codul. Variabila $do_not_duplicate trebuie schimbată într-o matrice, spre deosebire de o singură valoare. În caz contrar, prima buclă se va termina și variabila $do_not_duplicate va fi egală doar cu id-ul ultimei postări. Acest lucru va duce la postări duplicate în a doua buclă. Pentru a remedia problema înlocuiți

cu

rețineți că „posts_per_page” poate fi orice număr.Aceasta schimbă $do_not_duplicate într-o matrice. Apoi înlocuiți

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

cu

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

unde continuați modelul pentru orice posts_per_page este setat egal cu (2 în acest caz).

alternativ, puteți trece întreaga matrice $ do_not_duplicate la $wp_query și numai intrările care se potrivesc criteriilor dvs. vor fi returnate:

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

rețineți că în loc de un șir, parametrul de interogare a fost o matrice asociativă care a setat opțiunea post__not_in.

bucle imbricate

bucle de cuibărit înseamnă că executați o a doua buclă înainte de a termina prima. Acest lucru poate fi util pentru a afișa o listă post cu un cod scurt, de exemplu.

$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();

este necesar să resetați datele buclei principale după o buclă imbricată, astfel încât unele variabile globale să dețină din nou valorile corecte.

surse

secțiunea despre bucle multiple este o combinație a discuției lui Ryan Boren și Alex King despre bucla de pe lista de discuții a hackerilor. Exemplul imbricate loops a fost inspirat de o altă discuție pe lista de discuții și de o postare de Nicolas Kuttler.

resurse

  • WordPress WP_Query Generator
  • Noțiuni de bază în bucla – (slide-uri) o introducere la modul în care plugin-uri și teme pot modifica bucla
  • WordPress personalizat buclă
  • WordPress WP_Query Loop Generator

legate de

pentru a afla mai multe despre bucla WordPress și diferitele etichete șablon care funcționează numai în buclă, Iată mai multe resurse:

mai multe despre buclă

  • articol: bucla în acțiune
  • articol: etichete șablon
  • articol: Utilizarea buclei în fișiere șablon

articole

  • articol: bucla – o prezentare generală de bază a utilizării interogării în bucla WordPress.
  • articol: Prezentare generală a interogării – explicație a modului de determinare a interogărilor care generează WordPress.
  • articol: personalizarea interogări prin cârlig
  • articol: Vezi articole MYSQL interogare folosind personalizat
  • articol: construi interogări avansate pe taxonomii
  • articol: construi interogare personalizat folosind Offset și paginare

documentație Cod

  • clasă: WP_Query – prezentare detaliată a clasei WP_Query
  • Class: Wp_comment_query – Class pentru interogări legate de comentarii
  • Class: Wp_user_query-Class pentru interogări legate de utilizator
  • obiect: $wpdb – Prezentare generală privind utilizarea obiectului $wpdb
  • funcție: set_query_var()
  • funcție: Get_query_var()
  • funcție: Query_posts ()-creați interogare personalizată suplimentară
  • funcție: Get_post () – luați un ID al unui element și returnați înregistrările din baza de date pentru acel articol
  • funcție: get_posts() – o funcție specializată care returnează o serie de elemente
  • funcție: get_pages() – o funcție specializată care returnează o serie de pagini
  • funcție: have_posts() – o condiție care determină dacă interogarea a returnat un articol
  • funcție: the_post() – folosit pentru a seta automat bucla după o interogare
  • funcție: rewind_posts() – șterge bucla curentă
  • funcție: setup_postdata() – setează datele pentru un singur rezultat de interogare într-o buclă
  • funcție: Wp_reset_postdata() – restabilește interogarea anterioară (de obicei, după o buclă într – o altă buclă)
  • funcție: wp_reset_query()
  • funcție: is_main_query () – asigură că interogarea care este schimbat este doar interogarea principală
  • Cârlig de acțiune: pre_get_posts – interogări schimbare WordPress înainte de a fi executate
  • action hook: the_post – modificați obiectul post după interogare
  • filter hook: found_posts-modifică valoarea obiectului found_posts WP_Query
acest articol este marcat ca având nevoie de editare. Puteți ajuta Codex editând-o.

You might also like

Lasă un răspuns

Adresa ta de email nu va fi publicată.