WordPress egy CMS, ezért tartalom manipuláció egyik fő pillére az eszköz. Ebben a bejegyzésben meg fogja érteni a WP által használt folyamatot, hogy lekérje, mit kell megjeleníteni, valamint azt is, hogy hogyan lehet megváltoztatni ezt a folyamatot.
e szöveg célja semmiképpen sem helyettesíti a hivatalos dokumentációt, amelyet mindig meg kell vizsgálni. A cél az, hogy egy helyre tegye azt, amit a kezdőknek tudniuk kell, mielőtt további információkat keresnének.
- mi az a WordPress lekérdezés?
- mi az a WP_Query?
- feltételes címkék és WP_Query
- saját hurkok létrehozása: WP_Query és get_posts ()
- hurok létrehozása A WP_Query
- hurok létrehozása a get_posts()
- különbség a WP_Query és a get_posts () között
- globális WordPress wp_query és WordPress wp_the_query
- miért nem használható a query_posts() a témafájlokban?
- hogyan lehet megváltoztatni a fő lekérdezést? Use pre_get_posts
- egy másik példa: töröljön egy kategóriát a blogbejegyzések listájáról
- következtetés
mi az a WordPress lekérdezés?
a lekérdezés Angolul lekérdezést jelent, és általában az SQL (strukturált lekérdezési nyelv) utasításaira utal. A WordPress – ben a lekérdezéseket a wp_query osztályon keresztül készített tartalmakra vonatkozó lekérdezéseknek nevezzük.
mi az a WP_Query?
a WP_Query a PHP osztály a WordPress összes tartalomkeresése mögött. Számos paramétert fogad el a felépítésében, beleértve a post típusokat, a metaadatokat, a taxonómiákat és a dátumokat, valamint lehetővé teszi az egyéni paraméterek létrehozását.
a wp_query osztály a webhelyére érkező összes kérésnél aktiválódik, kivéve talán nagyon ritka kivételeket a Plugin által vezérelt címek esetében, amelyek megszakítják a normál folyamatot. Minden alkalommal, amikor felhívunk egy oldalt, egy bejegyzést, egy taxonómiai kifejezést stb. A WordPress a rewrite API-n keresztül értelmezi a kért címet, és az értelmezett argumentumok alapján létrehoz egy WP_Query-t.
feltételes címkék és WP_Query
saját hurkok létrehozása: WP_Query és get_posts ()
amikor a WordPress hurokra hivatkozunk, a kiválasztott bejegyzések iterációjáról beszélünk (n nélkül). Általában csak egy hurokunk van, amely mindig hasonlít az alábbi kódra:
ha vannak Hozzászólások, ismételje meg őket. Az első utasítás a while
belsejében the_post()
, amely azt mondja a WordPress-nek, hogy a hurok következő bejegyzésének változóit tegye a $post
globális változóba a wp_query osztály setup_postdata()
módszerével.
ez a fő hurok megjelenése, vagyis a WordPress által a kérés dekódolásakor és a megfelelő tartalom keresésekor talált bejegyzések ismétlése. Ha szükségünk van egy másik bejegyzéskészletre (kapcsolódó tartalom, egy bizonyos kategória tartalma a fájlon kívül, vagy például a megjelenítés után közzétett bejegyzések), akkor ezt kétféleképpen tehetjük meg: új wp_query objektum létrehozása vagy a get_posts () függvény meghívása. Mindketten ugyanazt csinálják, de különböző dolgokat fognak visszatérni hozzád.
hurok létrehozása A WP_Query
egyszerű példa arra, hogyan lehet hurkot létrehozni a WP_Query segítségével:
figyeljük meg, hogy a have_posts()
tesztje és iterációja ott marad, akárcsak a the_post()
, de ezúttal az általunk létrehozott változó módszereként.
a wp_reset_postdata () függvény arra szolgál, hogy visszaállítsa a $post
globális változót a lekérdezésünk előtti állapotába, vagyis visszahelyezi a global $post
– be a global $wp_query
posztját, amelyet később látni fogunk.
hurok létrehozása a get_posts()
ugyanaz a példa a get_posts()
függvény használatával:
a get_the_title () függvény paraméterként egy olyan bejegyzést fogad el, amely különbözik a $post
globális változótól. Ha például a_content () függvényt kell használnod, meg kell változtatnod a globálisat, az alábbiak szerint:
különbség a WP_Query és a get_posts () között
az alapvető különbség az, hogy mihez férhetsz hozzá. A WP_Query használatával hozzáférhet például az összesen talált bejegyzések számához ($query->found_posts
) és a lehetséges oldalak számához ($query->max_num_pages
). A get_posts()
függvény viszont néhány már kitöltött argumentumot hoz, amellett, hogy alapértelmezés szerint kissé gyorsabb: a no_found_rows
paramétert igaznak adja át, megakadályozva a végső lekérdezésnek a SQL_CALC_FOUND_ROWS
opciót, és ezzel mentesíti a MySQL-t a talált sorok teljes mennyiségének átadásától.
globális WordPress wp_query és WordPress wp_the_query
a kérés értelmezésének és a wp_query osztály objektum generálásának folyamatában a WordPress két globális változót hoz létre: $wp_query
, amelyet valószínűleg láttál valahol, és $wp_the_query
, amely mindig a felhasználó által kért eredeti példány lesz. Ha valaki szórakozik $wp_query
, legalább tudjuk, hogy vissza a normális állapot $wp_the_query
. Pontosan ezt teszi a wp_reset_query() függvény.
miért nem használható a query_posts() a témafájlokban?
ez az irányítópulton kívüli webhely címére irányuló kérés alapértelmezett folyamata:
nem szabad használni a query_posts() függvényt, mert korábban már meghívták. Ha újra felhívja, megismétli a feldolgozást (megkéri a WordPress-t, hogy készítsen egy másik lekérdezést), és emellett potenciálisan figyelmen kívül hagyja azt, amit néhány plugin már használt.
a lapozás egy másik példa arra, hogy a query_posts()
használata hogyan zavarhatja meg munkáját. Ha oldalanként 15 bejegyzést szeretne megjeleníteni egy bizonyos kategóriában, és megpróbálja felülírni az alapértelmezett WP összeget a query_posts()
segítségével, akkor olyan helyzetbe kerül, hogy a második oldal első elemének a 16., de valójában csak a 11. elemnek kell lennie.
hogyan lehet megváltoztatni a fő lekérdezést? Use pre_get_posts
a query_posts()
használata egy ideje nem ajánlott. Azóta sokan elmagyarázták, miért ösztönözték a fejlesztőket a pre_get_posts akció használatára, különös hangsúlyt fektetve Leo Bahiano-ra, aki szeretettel becézte a preguetinho akciót (a megjegyzésekben engedélyezett a szójátékok használata a Preguetinho do Leo Bahiano-val).
a használat egyszerű. A keresésben a lapozás kiküszöböléséhez például a következő kódot használhatja a téma functions.php
:
a kód hozzárendeli a funkcióját hook pre_get_posts
, így a funkciója minden lekérdezés feldolgozásakor végrehajtásra kerül. Ezen belül meg kell győződnünk arról, hogy csak a szükséges lekérdezésekkel fogunk dolgozni, ezért teszteljük, hogy valóban a webhely “elülső” részében vagyunk-e (ily módon nem zavarunk semmit a panelen), ha az oldal fő lekérdezésében vagyunk, vagyis ha a kérdéses lekérdezés $wp_the_query
, és ha mindez igaz, akkor a posts_per_page
attribútumot -1
– re változtatjuk, ami azt jelenti, hogy nincs korlátozás a hozzászólásokra.
egy másik példa: töröljön egy kategóriát a blogbejegyzések listájáról
ha sok változtatásra van szüksége, csatlakozhat hozzájuk egyetlen funkcióban: