WordPress paieškos triukai

Yra daug dalykų, kuriuos „WordPress“ daro gerai, bet paieška tikrai nėra vienas iš jų. Paieška niekad nebuvo stiprioji šios turinio valdymo sistemos funkcija ir nepanašu, kad kūrėjai būtų skyrę tam daug dėmesio. Ir nieko keisto – padaryti paiešką gerai nėra taip paprasta, nemaža dalis „WordPress“ vartotojų šios funkcijos iš viso nenaudoja, o lankytojai dažnai vietoj svetainės vidinės paieškos renkasi Google paiešką. Juk tereikia Google paieškos laukelyje prieš raktažodį įvesti site:domenas.lt ir Google tampa puikiausia vidinės paieškos alternatyva.

Todėl „WordPress“ kūrėjai nuėjo paprasčiausiu keliu – standartinė WordPress paieškos funkcija yra paprasta kaip trys kapeikos – tiesiog ieškoma raktažodžių įrašų tekste ir antraštėse. O jeigu kažkam reikia rimtesnio funkcionalumo, galima naudoti įskiepius arba pačiam tą paiešką pasitobulinti.

Todėl nenuostabu, kad search yra bene labiausiai „apgyvendintas“ raktažodis „WordPress“ įskiepių kataloge – su paieška susijusių įskiepių yra daugiau nei 4.000. Šie įskiepiai tobulina pačius įvairiausius paieškos aspektus – yra įskiepių, kurie gerina rezultatų rikiavimą, atvaizdavimą, yra tokių, kurie plečia paieškos užklausų sudarymo galimybes, leidžia atpažinti blogai parašytus raktažodžius (fuzzy search), rekomenduoti paieškos frazes pagal ankstesnių paieškų rezultatus ir pan.

Deja, dauguma mano bandytų įskiepių bando iš karto daryti daug dalykų ir todėl juos tampa sunku pritaikyti savo poreikiams. Todėl, jei pakeitimų reikia nedaug, stengiuosi juos padaryti pats, per „WordPress“ filtrus. Pavyzdžiui, „Klausk Arūno“ svetainėje man buvo reikalingi du pagrindiniai dalykai – paieška turėjo vykti ne tik tarp įrašų (Posts), bet ir viename nestandartiniame turinio tipe – klausimai. Be to, nemaža dalis turinio čia saugoma ne įrašo tekste, o viename iš papildomų laukų (custom fields), todėl buvo svarbu, kad paieška „žiūrėtų“ ir ten.

Turinio tipų filtravimas

Apriboti paiešką į du turinio tipus – labai paprasta. Tiesiog į temos functions.php failą reikėjo įterpti štai tokį filtrą:

Patikriname, kad užklausa vyksta ne valdymo skydelyje, ir tai yra tikrai paieška, ir pataisome užklausoje reikalingus turinio tipus.

Papildomų laukų filtravimas

Papildomų laukų (custom fields) filtravimo kodas yra panašus, tik reikia šiek tiek daugiau nustatymų.

Kaip ir įrašo tipų filtravimo atveju, čia mes modifikuojame pagrindinį WP_Query objektą, pridėdami filtravimą pagal vieną iš papildomų laukų. Jeigu reikia filtruoti daugiau laukų, tiesiog reikėtų papildyti $meta_query masyvą. Kaip tai daryti, galima pasiskaityti „WordPress“ WP_Query dokumentacijoje. Analogiškai galima pridėti ir filtravimą pagal taksonomijas (kategorijos, žymos ir kt) bei pataisyti bet kurią kitą užklausos dalį.

Bet…

Šioje vietoje yra vienas „kabliukas“ – pridėjus aukščiau minėtą patobulinimą, įrašas paieškos rezultatuose pasirodys tik tuomet, kai raktinis žodis bus ir straipsnio antraštėje (arba tekste), ir klausk_answer laukelyje. O mums užtektų kad raktažodis būtų bent vienoje iš šių vietų: antraštėje arba tekste arba klausk_answer laukelyje. Deja, šiaip labai lankstus, WP_Query šioje situacijoje pademonstravo stebėtiną užsispyrimą ir teko imtis ne tokių elegantiškų priemonių.

Aukščiau pateiktas filtras (dedamas į functions.php) performuoja MySQL SELECT užklausos WHERE dalį, perkeldamas paiešką papildomame lauke klausk_answer į kitą vietą ir pakeičia loginį AND į loginį OR.

PASTABA: Turiu perspėti, kad šis sprendimas nėra universalus, nes yra pritaikytas vienai konkrečiai situacijai. Įvairūs įskiepiai ir papildomi filtrai gali dar modifikuoti WHERE užklausos struktūrą, ir tuomet šį filtrą tektų perrašyti.