Nyelvek: angol • Français • Italiano • Hurok 日本語 Português do Brasil • Русский • 中文(简体) • 中文(繁體) • (Hozzáadás a nyelv)
A Hurok a PHP kód által használt WordPress hozzászólás megjelenítéséhez. A hurok használatával a WordPress feldolgozza az egyes bejegyzéseket, hogy megjelenjenek az aktuális oldalon, és formázza azokat aszerint, hogy megfelelnek-e a hurok címkéin belül megadott kritériumoknak. A hurokban lévő HTML vagy PHP kód minden bejegyzésen feldolgozásra kerül.
amikor a WordPress dokumentációja azt mondja, hogy “ennek a címkének a hurokon belül kell lennie”, például konkrét Sabloncímkéknél vagy bővítményeknél, a címke minden bejegyzésnél megismétlődik. Például a hurok alapértelmezés szerint a következő információkat jeleníti meg minden bejegyzéshez:
- cím (the_title ())
- idő (the_time ())
- kategóriák (the_category ()).
az egyes bejegyzésekről további információkat jeleníthet meg a megfelelő Sabloncímkék használatával, vagy (haladó felhasználók számára) a $post változó elérésével, amely az aktuális bejegyzés információival van beállítva, miközben a ciklus fut.
egy kezdő pillantást a hurok, lásd a hurok akcióban.
- a hurok használata
- Loop Examples
- Style Posts From Some Category Differently
- bejegyzések kizárása valamilyen kategóriából
- Objektumorientáció
- több hurok
- hurok példák
- több hurok 1.példa
- több hurok 2.példa
- több hurok működés közben
- beágyazott hurkok
- Sources
- források
- Related
- többet a hurok
- cikkek
- Kóddokumentáció
a hurok használata
a hurkot a téma indexébe kell helyezni.php-ben és bármely más sablonban, amelyet a post információk megjelenítésére használnak.
ügyeljen arra, hogy a fejlécsablon hívását a téma sablonjainak tetejére helyezze. Ha a hurkot a saját tervén belül használja (és a saját terv nem sablon), állítsa a wp_use_themes értéket false értékre:
<?php define( 'WP_USE_THEMES', false ); get_header(); ?>
a hurok itt kezdődik:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
és itt ér véget:
<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>
ez a PHP alternatív szintaxisát használja a vezérlési struktúrákhoz, és kifejezhető:
<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>
Loop Examples
Style Posts From Some Category Differently
ez a példa minden bejegyzést a címével (amely a bejegyzés állandó linkjére mutató hivatkozásként szolgál), kategóriákkal és tartalommal jelenít meg. Ez lehetővé teszi a ‘3’ Kategóriaazonosítóval rendelkező kategória bejegyzéseinek eltérő stílusát is. Ehhez az in_category () Sabloncímkét kell használni. Olvassa el figyelmesen a megjegyzéseket, hogy megnézze, mit csinál a kód egyes része.
Megjegyzés: minden HTML kód kívül kell lennie a <?php ?> címkék. És a PHP kódnak (még olyan egyszerű dolgoknak is, mint a göndör zárójelek: } ) a < – ben kell lennie?php ?> címkék. Elindíthatja és leállíthatja a PHP kód blokkjait, hogy a HTML kódot az if és else utasításokban interperszálja, amint azt a fenti példa mutatja.
bejegyzések kizárása valamilyen kategóriából
ez a példa bemutatja, hogyan lehet elrejteni egy adott kategóriát vagy kategóriákat a megjelenítéstől. Ebben az esetben a 3.és 8. kategóriába tartozó álláshelyek nem tartoznak ide. A példa abban különbözik a fenti példától, hogy megváltoztatja magát a lekérdezést.
Megjegyzés: Ha ezt a példát használja a főoldalához, akkor egy másik sablont kell használnia a Kategóriaarchívumokhoz; különben a WordPress kizárja a 3. és a 8. Kategória összes bejegyzését, még akkor is, ha megnézi azt a Kategóriaarchívumot! Ha azonban ugyanazt a sablonfájlt szeretné használni, ezt elkerülheti az is_home () címke használatával, hogy a 3. és a 8. kategóriába tartozó bejegyzések csak a főoldalról legyenek kizárva:
...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...
vannak más feltételes címkék is, amelyek felhasználhatók a kimenet vezérlésére attól függően, hogy egy adott feltétel igaz-e a kért oldalra vonatkozóan.
Objektumorientáció
a hurkok az objektumorientált és a globális viselkedés kombinációi. Ez eleinte zavaró.
a hurkok két fontos globális változója:
- $wp_query, amely egy objektum osztály WP_Query, kezében egy WP adatbázis lekérdezés eredménye, amelyek között $wp_query – > hozzászólás, egy sor egyedi WP_Posts.
- $post, amely a wp_post
osztály aktuális objektuma ne feledje: az összes sabloncímke alapértelmezés szerint a $post globális változóra támaszkodik, a $post globális változót pedig a the_post () állítja be/módosítja, amely az adatokat a $wp_query globális változóból kapja. a $post-ot a wp_query::the_post() is beállítja/módosítja a másodlagos hurkokban használt módon.
több hurok
ez a szakasz a hurok fejlett használatával foglalkozik. Ez egy kicsit technikai, de ne hagyd, hogy megijeszteni. Kezdjük egy egyszerű példával, és onnan folytatjuk a munkát. Egy kis józan ésszel, türelemmel és lelkesedéssel te is több hurkot is megtehetsz.
először is, miért akarna valaki több hurkot használni? Általában a válasz az, hogy érdemes valamit tenni az egyik bejegyzéscsoporttal, és valami mást tenni egy másik bejegyzéscsoporttal, de mindkét csoportot ugyanazon az oldalon jelenítheti meg. A “valami” szinte bármit jelenthet; csak a PHP készséged és a képzeleted korlátoz.
az alábbi példákba kerülünk, de először olvassa el az alapokat. Vessen egy pillantást az alaphurokra. Ez a következőkből áll:
<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>
egy kicsit félre a Do stuff: ebben a példában ez egyszerűen egy helyőrzője egy csomó kódot, amely meghatározza, hogyan kell formázni és megjeleníteni minden bejegyzést egy oldalon. Ez a kód változhat attól függően, hogy hogyan szeretné kinézni a WordPress-t. Ha megnézzük a Kubrick-téma indexét.php A do stuff szakasz minden alább lenne:
<?php while ( have_posts() ) : the_post(); ?>
a fenti:
<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>
magyarázat a kódolókhoz:a have_posts() és a the_post() kényelmi csomagolók a globális $wp_query objektum körül, ahol az összes művelet található. A $ wp_query a blog fejlécében kerül meghívásra, és a GET és a PATH_INFO segítségével érkező fed lekérdezési argumentumok. A $wp_query veszi az argumentumokat, és épít és végrehajtja a DB lekérdezést, amely egy sor bejegyzést eredményez. Ez a tömb az objektumban tárolódik, és visszakerül a blog fejlécébe, ahol a globális $posts tömbbe van töltve (a régi post hurkokkal való visszamenőleges kompatibilitás érdekében).
miután a WordPress befejezte a blog fejlécének betöltését, és leereszkedik a sablonba, megérkezünk a post hurokhoz. A have_posts () egyszerűen felhívja a $wp_query->have_posts () – t, amely ellenőrzi a hurok számlálót, hogy vannak-e bejegyzések a post tömbben. És a the_post() meghívja a $wp_query->the_post () függvényt, amely előlegezi a loop számlálót, és beállítja a globális $post változót, valamint az összes globális post adatot. Miután kimerítettük a hurkot, a have_posts () false értéket ad vissza, és kész vagyunk.
hurok példák
az alábbiakban három példát használunk több hurok használatára. A több hurok használatának kulcsa az, hogy a $wp_query csak egyszer hívható meg. Ennek megkerülése érdekében a lekérdezést újra felhasználhatja a rewind_posts() hívásával vagy egy új lekérdezési objektum létrehozásával. Ezt az 1. példa tárgyalja. A 2. példában egy változó használata a lekérdezés eredményeinek tárolására vonatkozik. Végül a ‘multiple loops in action’ egy csomó ötletet hoz össze, hogy dokumentálja a több hurok használatának egyik módját egy bizonyos kategóriájú bejegyzések népszerűsítésére a blog kezdőlapján.
több hurok 1.példa
annak érdekében, hogy ugyanazt a lekérdezést másodszor is áthúzza, hívja a rewind_posts () függvényt. Ez visszaállítja a hurok számlálót, és lehetővé teszi egy másik hurok elvégzését.
<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>
ha befejezte az eredeti lekérdezés bejegyzéseit, és egy másik lekérdezést szeretne használni, akkor újra felhasználhatja a $wp_query objektumot a query_posts() meghívásával, majd a visszacsatolással. A query_posts () új lekérdezést hajt végre, új posts tömböt épít, és visszaállítja a hurokszámlálót.
ha meg kell tartania az eredeti lekérdezést, létrehozhat egy új lekérdezési objektumot.
több hurok 2.példa
a több hurok használatának egy másik verziója újabb megközelítést alkalmaz a have_posts() és a the_post () használatának képtelenségének megkerülésére. Ennek megoldásához az eredeti lekérdezést egy változóban kell tárolnia, majd újra hozzá kell rendelnie a másik hurokhoz. Így használhatja az összes szabványos funkciót, amely az összes globálisra támaszkodik.
például:
Megjegyzés: A PHP 5-ben az objektumokra a “= clone” operátor hivatkozik a “=” helyett, mint a PHP 4-ben. Ahhoz, hogy a 2. példa PHP 5-ben működjön, a következő kódot kell használnia:
ez a második példa azonban nem működik a WordPress 2.1-ben.
több hurok működés közben
a több hurok használatának megértésének legjobb módja az, ha valóban példát mutat a használatára. Talán a több hurok leggyakoribb használata két (vagy több) bejegyzéslista megjelenítése egy oldalon. Ez gyakran akkor történik, amikor a webmester nem csak a legfrissebb írt bejegyzést akarja megjeleníteni, hanem egy bizonyos kategóriából származó bejegyzéseket is.
az összes formázási és CSS-problémát félretéve tegyük fel, hogy két bejegyzéslistát szeretnénk. Az egyik a legfrissebb bejegyzéseket sorolja fel (a legutóbb hozzáadott 10 bejegyzés), a másik pedig csak egy bejegyzést tartalmaz a ‘kiemelt’kategóriából. Először a ‘kiemelt’ kategóriába tartozó bejegyzéseket kell megjeleníteni, majd a bejegyzések második felsorolását (a szabványt). A fogás az, hogy egyik bejegyzés sem jelenhet meg mindkét kategóriában.
1. lépés. Csak egy bejegyzést kap a ‘kiemelt’ kategóriából.
angolul a fenti kód a következő lenne:
Set $my_query egyenlő az összes bejegyzés lekérdezésének eredményével, ahol a kategória neve kiemelt, és egyébként csak egy bejegyzést szerezz nekem. Állítsa be a $do_not_duplicate változót is, amely megegyezik a visszaadott egyetlen bejegyzés azonosító számával. Emlékezzünk arra, hogy a do stuff sor a letöltött bejegyzéshez társított összes formázási lehetőséget képviseli.
vegye figyelembe, hogy a következő lépésben a $do_not_duplicate értékre lesz szükségünk annak biztosításához, hogy ugyanaz a bejegyzés ne jelenjen meg mindkét listában.
2.lépés. A második hurok, szerezd meg az X legújabb hozzászólásokat (egy kivételével).
a következő kód x legutóbbi hozzászólást kap (a WordPress beállításaiban meghatározottak szerint) mentse el az első hurokból már megjelenítettet, és a Do stuff szerint jeleníti meg őket.
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>
angolul a fenti kód így szól:
Szerezd meg az összes hozzászólást, ahol egy bejegyzés egyenlő $do_not_duplicate akkor csak ne csinálj semmit (folytassa), különben az összes többi hozzászólást a Do stuff szerint jelenítse meg. Ezenkívül frissítse a gyorsítótárat, hogy a címkézés és a kulcsszó beépülő modulok jól játszhassanak. Visszahívás, $do_not_duplicate változó tartalmazza a már megjelenített bejegyzés azonosítóját.
a végeredmény
így néz ki az utolsó kóddarab formázás nélkül:
a végeredmény egy két listát tartalmazó oldal lenne. Az első lista csak egy bejegyzést tartalmaz – a legutóbbi bejegyzés a ‘funkció’ kategóriából. A második lista X legutóbbi bejegyzést tartalmaz (a WordPress beállításaiban meghatározottak szerint), kivéve azt a bejegyzést, amely már megjelenik az első listában. Tehát, ha a funkció post helyébe egy újat, az előző funkció jelenik meg a standard post list szakasz alatt (attól függően, hogy hány hozzászólás úgy dönt, hogy megjelenjen, és a post gyakorisága). Ezt a technikát (vagy hasonlót) sokan használják a Sablonhierarchia ismeretével együtt, hogy más otthont teremtsenek.php és index.php. Lásd a kapcsolódó forrásokat az oldal alján.
Megjegyzés több hozzászólás az első kategóriában
ha posts_per_page=2 vagy több, akkor meg kell változtatni a kódot egy kicsit. A $do_not_duplicate változót tömbre kell változtatni, nem pedig egyetlen értékre. Ellenkező esetben az első ciklus befejeződik, és a $do_not_duplicate változó csak a legutóbbi bejegyzés azonosítójával lesz egyenlő. Ez duplikált hozzászólásokat eredményez a második hurokban. A probléma megoldásához cserélje ki a
szót
Megjegyzendő, hogy a “posts_per_page” tetszőleges szám lehet.Ez megváltoztatja $do_not_duplicate egy tömb. Ezután cserélje ki a
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>
értéket
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>
értékre, ahol folytatja a mintát bármilyen posts_per_page értékre (ebben az esetben 2).
Alternatív megoldásként a teljes $do_not_duplicate tömböt átadhatja $wp_query-nek, és csak a feltételeknek megfelelő bejegyzéseket adja vissza:
<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
ne feledje, hogy a karakterlánc helyett a lekérdezési paraméter asszociatív tömb volt, amely beállította a post_ _ not_in opciót.
beágyazott hurkok
a fészkelő hurkok azt jelentik, hogy egy második hurkot futtat az első befejezése előtt. Ez hasznos lehet például egy rövid kóddal ellátott bejegyzéslista megjelenítéséhez.
$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();
a fő hurokadatokat egy beágyazott hurok után vissza kell állítani, hogy egyes globális változók ismét a helyes értékeket tartsák.
Sources
a több hurokról szóló rész Ryan Boren és Alex King beszélgetésének kombinációja a hackerek levelezőlistáján található hurokról. A beágyazott hurkok példáját egy másik vita ihlette a levelezőlistán, valamint Nicolas Kuttler egyik hozzászólása.
források
- WordPress WP_Query Generator
- bekerülni a hurok – (diák) bevezetés hogyan plugins és témák módosíthatja a hurok
- WordPress egyéni hurok
- WordPress WP_Query hurok generátor
Related
Ha többet szeretne megtudni a WordPress hurok, és a különböző sablon címkék, hogy a munka csak a hurok, itt További források:
többet a hurok
- cikk: a hurok akcióban
- cikk: sablon címkék
- cikk: A hurok használata Sablonfájlokban
cikkek
- cikk: a hurok – alapvető áttekintés a lekérdezés használatáról a WordPress hurokban.
- cikk: lekérdezés áttekintése-magyarázat arra, hogyan lehet meghatározni, hogy mely lekérdezések generálják a WordPress-t.
- cikk: a lekérdezések testreszabása horogon keresztül
- cikk: Cikkek megtekintése MYSQL lekérdezés egyéni
- cikk: speciális lekérdezések készítése Taxonómiákon
- cikk: egyéni lekérdezés készítése eltolással és lapozással
Kóddokumentáció
- osztály: WP_Query – az osztály részletes áttekintése WP_Query
- Class: WP_Comment_Query – osztály a megjegyzésekkel kapcsolatos lekérdezésekhez
- Class: WP_User_Query-osztály a felhasználóval kapcsolatos lekérdezésekhez
- Object: $wpdb – áttekintés a $wpdb objektum használatáról
- Function: set_query_var()
- Function: Get_query_var()
- Function: Query_posts ()-hozzon létre további egyéni lekérdezést
- Function: Get_post () – vegyen egy elem azonosítóját, és adja vissza az adott cikk adatbázisában lévő rekordokat
- function: get_posts() – egy speciális funkció, amely visszaadja az elemek tömbjét
- Function: get_pages() – egy speciális funkció, amely visszaadja az oldalak tömbjét
- Function: have_posts() – olyan feltétel, amely meghatározza, hogy a lekérdezés visszaadott – e egy cikket
- Function: the_post () – a ciklus automatikus beállítására szolgál egy lekérdezés után
- Function: rewind_posts () – törli az aktuális hurok
- function: setup_postdata () – beállítja az adatokat egyetlen lekérdezés eredménye egy hurok
- function: wp_reset_postdata() – visszaállítja az előző lekérdezést (általában egy hurok után egy másik cikluson belül)
- Function: wp_reset_query()
- Function: is_main_query() – biztosítja, hogy a megváltoztatott lekérdezés csak a fő lekérdezés legyen
- Action Hook: pre_get_posts – változtassa meg a WordPress lekérdezéseket, mielőtt végrehajtják őket
- Action Hook: the_post – a post objektum módosítása lekérdezés után
- filter Hook: found_posts – megváltoztatja a found_posts objektum értékét wp_query