Felipe Elia tippek a WordPress

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?

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:

következtetés



+