Štai kaip atkurti visus norimus įrašus naudojant „WP_Query“

Jei praeityje kūrėte paprastas temas, jums tikrai neatsirado poreikio atkurti įrašus. Galų gale „WordPress“ įkelia paskutinius 10 pranešimų pagrindiniame puslapyje ir teisingus įrašus archyvo puslapiuose. O kaip sudėtingesni scenarijai? Ką daryti, jei norėtumėte rūšiuoti svetainės schemą ir norite išvardyti visus savo įrašus ir puslapiai surūšiuoti pagal datą?


WP_Query yra jūsų draugas, tai leidžia jums surinkti žinutes iš duomenų bazės pagal jūsų kriterijus. Visus įrašus galite nuskaityti iš vienos kategorijos, kurioje taip pat yra tam tikrų žymų. Galite nuskaityti visus praėjusiais metais sukurtus puslapius ir įrašus, kuriuose nėra matomo vaizdo.

Šiame įraše išsamiai apžvelgsiu, kaip veikia „WP_Query“ – pradėkime!

Individualizuota kilpa

Norint gerai dirbti su pasirinktinėmis užklausomis, reikia įsisavinti argumentus, kuriuos galite jiems pateikti. Prieš pažvelgdami į tai, sukurkime greitą "skeletas" galime naudoti įrašų sąrašams. Įprasto archyvo puslapio kilpa atrodytų maždaug taip:

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

<?php pagaliau ?>
<?PHP dar: ?>

<?php endif ?>

Tai veikia puikiai, nes prieš įkeliant puslapį, „WordPress“ jau nuskaito tinkamus pranešimus. Kai rašome pasirinktinę užklausą, mums reikės pasirinktinės kilpos. Kodas labai panašus, štai:

<?php
$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘post_status’ => ‘ateitis’
);
$ suplanuotas = nauja WP_Query ($ args);

if (suplanuota $->turėti_postus ()):
?>
<?php while (suplanuota $->have_posts ()): suplanuotas $->paštas() ?>

<?php pagaliau ?>
<?PHP dar: ?>

<?php endif ?>

Mes sukuriame naują „WordPress“ užklausą naudodamiesi „WP_Query“ klase, perduodami jos parametrus, kad nurodytume reikiamų pranešimų tipus. Tada mes vadiname have_posts () ir the_post () metodus mūsų suplanuotame objekte $.

Jei dar nesate orientuoti į objektų programavimą ir nelabai suprantate, kodėl, nesijaudinkite, vis tiek galite lengvai naudoti tinkintas užklausas. Mes sutelksime dėmesį į $ args masyvą visame įraše, kuris bus gana paprastas.

Paprasti argumentai

Kaip jau minėjau, pagrindinis "žinių kūnas" kai kalbama apie WP_Query, slypi jos argumentuose. Kodeksas išvardykite juos visus, apžvelgsime naudingiausius.

Kai kurie argumentai yra gana paprasti, pavyzdžiui, žyma arba tag_id parametras. Pirmasis užima etiketės šliuzą, vėliau – etiketės ID. Taip pat galite atskirti kelis elementus kableliais arba naudoti neigiamus ID, kad nurodytumėte, jog norite atkurti įrašus ne prisekite tą žymą.

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘tag_id’ => ’22, 92,44, -21 ‘
);
$ our_posts = nauja WP_Query ($ args);

Fragmentas gautų straipsnius, prie kurių pritvirtinta bet kuri iš trijų pirmųjų žymų, bet ne ketvirtoji. Nors ši sistema yra pakankamai galinga paprastiems poreikiams patenkinti, aš paprastai naudojuosi kur kas lankstesne taksonomijos užklausa, kurią aptarsiu šiek tiek vėliau.

Autorius, autoriaus vardas, katė, kategorijos vardas, s (ieškant terminų), post_status, post_type yra keletas paprastesnių laukų pavyzdžių. Atminkite, kad kai kuriuose laukuose, pvz., „Post_status“, jums reikia perduoti būsenų masyvą, jei norite naudoti kelias reikšmes.

$ args = masyvas (
‘post_type’ => masyvas (‘post’, ‘page’),
‘post_status’ => masyvas („juodraštis“, „skelbti“),
‘katė’ => ‘Muzikiniai klipai’
);
$ our_posts = nauja WP_Query ($ args);

Aukščiau pateiktame pavyzdyje pateikiami visi įrašai, kurie yra puslapiai, įrašai; yra paskelbti arba juodraščiai, jiems priskirta muzikos arba vaizdo įrašų kategorija. Tai gali būti naudojama bet kokio esamo ar planuojamo turinio, susijusio su muzika ar vaizdo įrašais, pavadinimams rodyti.

Taksonomijos užklausos

Paprastiems dalykams užtenka naudoti minėtus argumentus, kad gautumėte įrašus pagal kategorijas ar žymas, tačiau ką daryti, jei turite pasirinktinę taksonomiją arba turite derinti kelis parametrus? Atsakymas slypi tax_query argumente, kuris pats yra masyvas. Pirmiausia pažiūrėkime į pavyzdį.

$ args = masyvas (
‘post_type’ => ‘knyga’,
‘tax_query’ => masyvas (
masyvas (
‘taksonomija’ => ‘žanras’,
‘laukas’ => ‘šliužas’,
‘terminai’ => masyvas (‘scifi’, ‘trileris’),
‘operatorius’ => „NĖRA“,
),
masyvas (
‘taksonomija’ => ‘autorius’,
‘laukas’ => ‘id’,
‘terminai’ => masyvas (92, 883, 399),
),
‘santykis’ => ‘IR’,
),
);
$ užklausa = nauja WP_Query ($ args);

Čia gauname kai kuriuos įrašus iš „knygos“ tipo, pridėdami keletą taksonomijos parametrų. Naudodamiesi dviem „tax_query“ apibrėžtais masyvais, mes nurodėme, kad norime ištraukti knygas, parašytas 92, 883 arba 399 autorių, kurios yra ne mokslinės fantastikos ar trilerio žanre. Santykio parametras nusako santykį tarp dviejų masyvų. Mūsų atveju santykiai „ir“ reiškia, kad turi būti įvykdytos abi sąlygos.

Jei būtume vartoję „arba“, būtume gavę knygų, kurios nepriklauso mokslinio ar trilerio kategorijai, arba kurias parašė nurodyti trys autoriai. Paprasta anglų kalba tai reiškia: noriu pamatyti visas savo knygas, išskyrus mokslinės fantastikos ir trilerio žanrus. Tačiau noriu pamatyti visas Terry Pratchett, Douglas Adams ir Stephen King knygas, nepriklausomai nuo žanro.

Meta užklausos

Meta užklausos struktūroje yra labai panašios į taksonomijos užklausas, tačiau pranešimų filtravimui jie naudoja duomenis iš meta meta lentelės. Žemiau esančiame kode bus rodomi visi paskelbti įrašai, kuriuose yra matomas vaizdas.

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘meta_query’ => masyvas (
masyvas (
‘raktas’ => ‘_umbumb_id’,
‘vertė’ => ”,
‘palyginti’ => ‘! =’,
),
),
);
$ užklausa = nauja WP_Query ($ args);

„WordPress“ išsaugo įrašo rodomo vaizdo ID, naudodamas lauką _thumbnail_id. Taigi jei gautume visus įrašus, kuriuose ši meta reikšmė nėra tuščia, turėtume baigti visus pranešimus, kuriuose yra rodomas vaizdas.

Paslaptis čia yra žinojimas, kaip naudoti palyginimo savybę ir tipą. Galite naudoti daugybę reikšmių, kurios turėtų būti žinomos iš SQL: ‘=’, ‘! =’, ‘>’,’>= ‘,'<‘,'<= ‘,’ LIKE ‘,’ NOT LIKE ‘,’ IN ‘,’ NOT IN ‘,’ BETWEEN ‘,’ NOT BETWEEN ‘,’ EXISTS ‘(from WordPress 3.5 and up) ir’ NOT EXISTS ‘(from WordPress 3.5 ir aukštyn)

Tipo ypatybė paprastai yra svarbi, kai norite palyginti skaičius ar datas. Galimos vertės yra „NUMERIS“, „BINARY“, „CHAR“, „DATE“, „DATETIME“, „DECIMAL“, „PASIRAŠYTA“, „LAIKAS“, „NESKIRTAS“. Atminkite, kad lygindami skaičius naudokite NUMERIC, daugeliu atvejų jums viskas gerai.

Kaip ir naudodamiesi taksonomijos užklausomis, galite sukrauti kelis reikalavimus ir tada naudoti santykio parametrą, kad nustatytumėte jų ryšį.

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘meta_query’ => masyvas (
‘santykis’ => „ARBA“,
masyvas (
‘raktas’ => ‘nuotaika’,
‘vertė’ => masyvas (‘laimingas’, ‘nuostabus’),
‘palyginti’ => „IN“,
),
masyvas (
‘raktas’ => ‘pajamos’,
‘vertė’ => 500,
‘palyginti’ => ‘>’,
‘tipas’ => „NUMERIC“
),
),
);
$ užklausa = nauja WP_Query ($ args);

Aukščiau pateiktame pavyzdyje būtų rodomi hipotetinio dienoraščio įrašai, kuriuose nutiko kažkas gero. Aš arba jaučiausi laimingas, ar nuostabus, arba tą dieną uždirbau daugiau nei 500 USD.

Datos parametrai

Datos gali būti šiek tiek sudėtingos, tačiau yra labai lanksčios. WP_Query dokumentacija turi daugybę pavyzdžių, jei reikia daugiau informacijos.

Atkurti žinutes iš tam tikro laiko yra gana lengva. Norėdami nurodyti laiką, galite naudoti metus, mėnesį, w (metų savaitę), dieną ir dar porą kitų parametrų. Žemiau pateiktame kode bus pateiktos visos žinutės nuo 2013 m. Kovo mėn.

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘metai’ => 2013 metai,
‘mėnuo’ => 3
);
$ užklausa = nauja WP_Query ($ args);

Jei norite patekti į sudėtingesnius laiko intervalus, turėsite naudoti „date_query“. Tai leidžia gana lengvai nurodyti savavališkus diapazonus, naudojant įprastą masyvo formatą. Šis pavyzdys – su „Codex“ sutikimu – parodo, kaip galite atkurti pranešimus, kurie buvo parašyti darbo dienomis nuo 9 iki 17 val..

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘data_query’ => masyvas (
masyvas (
‘valanda’ => 9,
‘palyginti’ => ‘>= ‘,
),
masyvas (
‘valanda’ => 17,
‘palyginti’ => ‘<= ‘,
),
masyvas (
‘savaitės diena’ => masyvas (2, 6),
‘palyginti’ => „TARP“,
),
),
);
$ užklausa = nauja WP_Query ($ args);

Užsakymo rezultatai

Sąrašo pateikimo tvarka yra tokia pat svarbi kaip ir elementai. Laimei, „WordPress“ mums siūlo order_by ir užsakymo parametrus. Užsakymo parametras yra gana paprastas, galite naudoti ASC arba DESC, norėdami užsisakyti kylančią ar mažėjančią.

Parametras „order_by“ gali įgyti keletą reikšmių: „nėra“, „ID“, „autorius“, „pavadinimas“, „vardas“, „tipas“, „data“, „modifikuotas“, „tėvas“, „randas“. , ‘comment_count’, ‘menu_order’, ‘meta_value’, ‘meta_value_num’, ‘post__in’. Užsakymas pagal meta_vertę gali būti ypač naudingas. Tokiu atveju nepamirškite nurodyti ir „meta_key“ lauko.

$ args = masyvas (
‘post_type’ => ‘tapyba’,
‘meta_query’ => masyvas (
masyvas (
‘raktas’ => ‘kaina’,
‘vertė’ => 50000,
‘palyginti’ => ‘>’,
‘tipas’ => „NUMERIC“
),
),
‘order_by’ => „meta_value_num“,
‘meta_key’ => ‘kaina’
);
$ užklausa = nauja WP_Query ($ args);

Šiame pavyzdyje pateikiami paveikslai, kurių vertė didesnė kaip 50 000 USD, ir nurodoma, kad jie didėja pagal kainą. Atminkite, kad kadangi kaina saugoma kaip skaičius, rezultatų užsakymui naudojau meta_value_num, o ne meta_value, kuri būtų naudojama eilutėms..

Kitas užsakymas, kurį verta paminėti, yra post__in. Šis post__in yra savaime parametras, jis leidžia nurodyti nuskaitymo įrašų ID masyvą. Pagal numatytuosius nustatymus „WordPress“ užsako įrašus pagal datą, „post__in“ nurodyta tvarka nėra išsaugota. Jei užsakymą pagal vertę taip pat naudosite „post__in“, „WordPress“ užsakymą išsaugos.

$ args = masyvas (
‘post_type’ => ‘skelbti’,
‘post__in’ => masyvas (23, 441, 12, 322, 34, 33),
‘order_by’ => ‘post__in’,
);
$ užklausa = nauja WP_Query ($ args);

Apvyniokite

Tikiuosi, kad iš šio „WP_Query“ įvado bus aišku, kad tai iš tikrųjų yra galinga klasė. Tai leidžia jums atkurti pranešimus pagal jūsų kriterijus WP standartiniu būdu. Pažvelkite į ją dokumentacija Norėdami gauti daugiau informacijos ir puikių savybių bei metodų, ši klasė siūlo manipuliuoti užklausa ir kilpa.

„WP_Query“ yra dalis to, kas „WordPress“ paverčia puikia bendrąja CMS – galimybė moduliniu būdu ir pritaikyti nuskaityti objektus iš duomenų bazės..

Jei turite klausimų, praneškite mums komentaruose!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map