Millised meetodid on kohandatud postituspäringu tegemiseks saadaval ja millal on neid kõige parem kasutada? Selle postituse eesmärk on luua kindel arusaam kahest postituste pärimise meetodist, kuidas pääseda juurde tulemustele, kuidas luua argumente ja lõpuks, kuidas pärast seda puhastada. Kaks meetodit, mida me vaatleme, on get_posts()
ja WP_Query
.
Kui tegemist on uue postituse päringu tegemisega, on (kirjutamise ajal) kaks võimalust. Valik sõltub tõesti teie eelistustest (ja mõnest väiksemast tulemuslikkusest). Üks võimalus võib teie praegu kasutatava globaalse ahela/päringu segi ajada, kui te seda õigesti ei käsitle. Ühe valikuga käsitlete objekte ja teise valiku korral massiivi. Postituspäringu kohandamise argumendid on aga identsed.
Globaalne päring?
Kui te pole kindel, mida ma mõtlen terminiga "globaalse päringu segamine", siis see on see. WordPress teeb alati ühe globaalse päringu, olenevalt sellest, millisel lehel olete. Kui külastaja külastab kategooriaarhiivi, on WordPress teinud selle kohta postituspäringu. Teema pääseb tavaliselt päringu postitustele juurde, kasutades "silmust". Kui teeme uue päringu, millel on selle tsükli sees oma tsükkel, peame tagama, et WordPressi globaalset päringut ja meie päringut käsitletakse eraldi.
Kui soovite aga WordPressi postituspäringut muuta, on see teine lugu. Mul on veel üks postitus, mis käsitleb seda, kuidas seda teha.
Vaatame kahte võimalust, mis meil on ja kuidas me nendega tegeleme. Pärast seda vaatame päringu kohandamise argumente. Pidage meeles, et mõlema argumendid on identsed.
Postituste päringute tegemise kaks meetodit
Postituste kohta saate päringuid teha kas funktsiooniga get_posts()
või uue eksemplari loomisega WP_Query.
. Esimene valik tagastab postituste massiivi ja teises käsitlete objekti. Kuna get_posts()
tagastab massiivi ainult postitustest, on seda tavaliselt lihtsam kasutada kõikjal, kus soovite. Kui aga soovite oma päringut lehekülgedele lisada, peaksite kindlasti looma WP_Query
eksemplari.
Funktsioon get_posts
on ümbrisfunktsioon, WP_Query
mis tähendab, et see aktsepteerib samu argumente, kuid get_posts
sellel on mõned täiendavad "aliase" argumendid. WordPressi dokumentatsioonileht get_posts jaoks ei loetle võimalikke argumente (välja arvatud pseudonüümi argumendid), vaid viitab argumentide jaoks WP_Query dokumentatsioonilehele. Vaatleme argumente hiljem lähemalt.
Kui toimivus on probleem (st saidil on palju postitusi), get_posts
on see kiirem kui kasutamine, WP_Query
kuna jätab lehekülgede arvu arvutamise vahele.
Kohandatud postituspäringu läbimise meetod erineb olenevalt valitud meetodist. Peaksite olema tuttav tavalise WordPressi tsükliga, mida kasutatakse peaaegu kõigis teemamallides:
if (have_posts()) {
while (have_posts()): the_post();
// Access to each post; you can use template tags here
endwhile;
}
Looming WP_Query abil
Kasutamise tulemuste WP_Query
loomine on täpselt sama, välja arvatud see, et viitame konkreetselt tsüklis esinevale eksemplariobjektile. Peame meeles pidama ka oleku lähtestamist pärast silmuste loomist, nii et globaalne postitusobjekt naaseb sellele, mis see oli. Selleks kasutame wp_reset_postdata()
.
Kui tühjendate objekti, mille instantseerib WP_Query
( $custom_query
ülaltoodud näites), leiate kogu päringu ja kasutatud argumendid. Huvitavad osad siin on atribuudid " found_posts
" ja " posts
". Atribuut " posts
" sisaldab postiobjektide tulemust, millest tsükkel läbib. Teie päringule vastanud postituste arv tagastatakse kaustas „ found_posts
" ja see on kasulik, kui soovite teha kohandatud lehekülgede järjekorda. Jagage see väärtus WordPressi sättega postituste arvu kohta lehel, et välja selgitada, mitu lehekülge teil oma päringu jaoks vaja on, või viidake lihtsalt atribuudile " max_num_pages
".
Märkus. Kui kasutate get_posts
WordPressi, tagastab WordPress objektilt ainult posts
atribuudi " " (mis on massiiv) .WP_Query
Looming kasutades get_posts
Kasutades get_posts
ei kasuta me tavalist “WordPressi tsüklit”, selle asemel kasutame tavalist PHP massiivisilmust. Iga massiivi element on postiobjekt ja pärast silmuse loomist pole lähtestamine vajalik. Pidage meeles, et mallisildid (nt the_title()
jne the_permalink()
) pole selles tsüklis saadaval. Peate viitama postitusobjekti omadustele (nt $custom_post->ID
).
Soovitan oma postitusobjektidele anda teistsuguse nime kui $post
. Postituse atribuutidele juurde pääsedes võib tekkida probleeme (see võib viidata globaalsele postitusobjektile, mitte tsüklis olevale postitusele).
Kui soovite postitusteabe lihtsamaks juurdepääsuks kasutada mallisilte (nt the_title()
ja the_permalink()
), saate seda teha. Selleks käske WordPressil seadistada tsükli sees globaalne postitusobjekt koos setup_postdata()
. Kui teete seda, peate lähtestama oleku wp_reset_postdata()
pärast silmust.
$custom_query = get_posts([/ Arguments here /]);
foreach ($custom_query as $post) {
setup_postdata($post);
// Template tags are available here, for example:
the_title();
}
wp_reset_postdata();
Pidage meeles, et setup_postdata
objektid, mida läbite (" as
" osa foreach-tsüklis), peavad olema nimed $post
! Esimeses näites nimetasin postituse objektid $custom_post
ja see ei töötaks koos setup_postdata()
.
Kui aga vajate juurdepääsu põhilisele postitusteabele, võite globaalse postitusobjekti seadistamise ka vahele jätta ja pigem kasutada vastavaid " get_
"-malli silte ja postituse ID-d. Näiteks silt the_permalink()
töötab õigesti ainult siis, kui globaalne postitusobjekt on seadistatud, kuid saate taotleda postituse püsilinki ilma globaalse postitusobjektita, kasutades lihtsalt echo get_the_permalink($custom_post->ID)
.
Päringuargumendid
Kõigi võimalike argumentide täieliku loendi leiate WP_Query dokumentatsiooni lehelt. Parameetrite näideteks on postitused, mis sisaldavad taksonoomiast kindlat terminit, postituse metaväärtused, postituste tüübid, konkreetsete postituste kaasamine või välistamine ning terve hulk tulemuste järjestamise võimalusi. Neid on liiga palju, et igaüks neist üksikasjalikult läbi käia, kuid siin on mõned levinumad näited postituste päringute esitamise argumentidest.
Näide 1: seotud postitused samast kategooriast
Oletame, et soovite ühe postituse lõpus kuvada "seotud postitused". See peaks näitama juhuslikult valitud 3 postitust, mis on praeguse postitusega samas kategoorias, ja see peaks praeguse postituse tulemusest välja jätma.
Argumendid on üsna iseenesestmõistetavad. Ma palun ainult ‘ post
" in " post_type
" ja maksimaalselt 3 postitust " posts_per_page'
.
Kategooriate kaupa postituste päringute tegemiseks saate koostada tax_query või kasutada lihtsamat " category__in
" (NB: töötab ainult postituste kategooria puhul). Ülaltoodud näites kasutan ma wp_get_post_categories()
pakutud postitusele määratud termini ID-de massiivi saamiseks ja kasutan seda argumendi " category__in
" jaoks.
Postituse ID-d saate välistada märkega „ post__not_in
“, samas kui mina esitasin praeguse postituse ID. Lõpuks küsisin postituste juhuslikku järjekorda, määrates ‘ rand
‘ sisse " orderby
". Nende erinevaks järjestamiseks võite lisada nt " title
" või " ". date
Vaadake tellimise dokumentatsiooni, et näha, mis on võimalik.
Näide 2: kõik postitused kohandatud postitustüübist koos mitme järjestamisargumendiga
Selles näites eeldame, et teil on kohandatud postituse tüüp " book
" ja kohandatud lehemallis soovite kuvada kõik avaldatud raamatud. Soovite postitusi järjestada eelkõige menu_order (lehe atribuut, see on number, mille saate postituse kohta määrata) ja teiseks postituse pealkirja järgi.
Jällegi on argumendid üsna iseenesestmõistetavad. Soovin postituse tüüp " book
" kui " post_type
". Kui seate " posts_per_page
" väärtuseks -1, hangitakse kõik (avaldatud postitused, kui te ei määra post_status
argumendis " " midagi muud). Lõpuks pakun massiivi " orderby
", et käskida WordPressil postitusi sortida peamiselt menüüjärjestuse järgi kasvavas järjekorras ja teiseks postituse pealkirja kahanevas järjekorras.
Näide 3: kohandatud metaandmetega postitused
Oletame, et teil on kohandatud postituse tüüp book
ja soovite esitada päringu kõigi raamatute kohta, mis on avaldamata või mis on avaldatud aastatel 1990–2019.
Päringu koostamine post-meta abil on kõige parem teha meta_query
(väga lihtsate metaargumentide jaoks saate kasutada meta_key
ja meta_value
otse). Argument " meta_query
" nõuab massiivi, kus iga argument on massiiv. Iga argumendi vahelist seost saate juhtida parameetriga " relation
", mille ma OR
ülaltoodud näites määrasin väärtuseks " ".
Esitan kaks metaandmete argumenti " meta_query
". Esimene võrdleb lihtsalt metavõtit " book_status
" tekstiga " unpublished
" ja kui see on võrdne, lisatakse see. Teises argumendis ütlen WordPressile, et ta hankiks metavõtmes mistahes väärtuse, year_published
mis jääb numbrite 1990 ja 2019 vahele.
Järeldus
Nüüd peaksid teil olema põhiteadmised kahest postituste pärimise meetodist. Suurt erinevust pole, kuna saate mõlemat kasutades luua sama päringu, kuid nende kahe käsitlemise viis on erinev. Kolm esitatud päringuargumentide näidet puudutavad ainult nende päringute pinda, mida saate luua. Täieliku ülevaate saamiseks koos rohkete näidetega vaadake WP_Query dokumentatsiooni .
Kui teid huvitab, kuidas WordPressi globaalset päringut muuta, on mul selle kohta eraldi postitus.