Funcția de căutare în WordPress are o reputație proastă, pentru că există o mulțime de diferite plug-in-uri, care vă permite să facă anumite îmbunătățiri în ea, dar nu oferă întotdeauna ceea ce ai nevoie, mai ales dacă doriți să creați un motor de căutare suplimentare în conformitate cu anumite cerințe fixe.
În acest articol, vom examina cum să creați propria dvs. căutare WordPress și, în același timp, să dezvăluiți câteva secrete.
În ciuda numeroaselor plugin-uri care vă permit să îmbunătățească diferite aspecte ale căutare WordPress, începând cu ordonarea în funcție de relevanță, și terminând cu includerea unor câmpuri arbitrare în căutare, există situații în care plugin-urile, și în orice combinație a acestora, nu sunt capabili de a efectua exact ceea ce vrei, și în cele din urmă, trebuie să vă scrieți propriul cod.
Îmbunătățiți căutarea în WordPress prin adăugarea unui formular de căutare avansată
Clasa WP_Query este responsabilă pentru căutarea WordPress. Dacă ați lucrat cu bucle arbitrare, aveți o idee despre WP_Query.
WP_Query are multe parametri posibili, dintre care multe pot fi ușor identificate în formularul de căutare (sau direct în URL), ceea ce va schimba comportamentul de căutare.
De exemplu, pentru a transforma o căutare normală într-o căutare pentru un tip arbitrar de produs numit, introduceți următoarele:
Ca rezultat, vom obține rezultate pentru înregistrările cu tipul de produs, care conțin cuvântul fotbal în antetul sau conținutul lor.
Rețineți că este important să includeți parametrul s în adresa URL pentru căutare.
Există, de asemenea, mulți parametri suplimentari cu care puteți schimba complet comportamentul, dar care, din păcate, nu sunt documentați în cod.
Căutare frază
Implicit, WordPress caută cuvântul cheie. Aceasta înseamnă că, dacă este trimisă o căutare în căutarea "cizme de fotbal", WordPress generează următorul cod pentru clauza WHERE:
După cum puteți vedea, aceasta nu este o căutare a întregii fraze, ci căutarea cuvintelor individuale - "fotbal" în titlu sau conținut și "cizme" în titlu sau în conținut. Astfel, o înregistrare care conține cuvântul "boot" în titlu și "fotbal" în conținut nu va corespunde în mod evident ceea ce a dorit utilizatorul, dar va fi afișat pe ecran.
Cu toate acestea, puteți face ca WordPress să caute expresii - este suficient să adăugați propoziția = 1 la adresa URL, ceea ce va schimba clauza WHERE:
Acum, căutarea este efectuată în funcție de frază, astfel încât titlul sau conținutul materialului ar trebui să conțină și cuvinte (nu neapărat într-un rând) care să fie găsite și afișate. Încercați-l pe propriul dvs. site web. Porniți o căutare normală, apoi adăugați teză = 1 la adresa URL și vei vedea diferența.
Potriviți potrivirea exactă
Asociat cu teza, cu toate acestea, parametrul exact este mai specific. Adăugarea exactă = 1 la adresa URL va duce la următoarele modificări la clauza WHERE:
În loc să căutați diferențe, vă spun imediat că singura diferență dintre propoziție și condițiile exacte este de a elimina% din jurul frazei în instrucțiunile LIKE. Această ștergere este de o importanță deosebită, deoarece acum titlul sau conținutul ar trebui să se potrivească exact cu interogarea de căutare, și nu doar să o includă în sine.
Aceasta înseamnă că, dacă niciun produs nu are fraza "cizme de fotbal" în titlu, atunci nu vor fi date rezultate. Utilizarea exactă ar trebui să fie foarte atentă.
Modificați formularul de căutare
Formularul standard de căutare în WordPress este destul de simplu:
Dacă doriți să modificați comportamentul de căutare, trebuie să adăugați propriile câmpuri în formular.
Acest formular de căutare va trimite următoarea adresă URL atunci când este trimis:
Încă o să fie afișată o pagină standard de rezultate de căutare, dar aceste rezultate vor fi deja pentru un tip de înregistrări de produse arbitrare, iar intrările de ieșire trebuie să conțină o expresie de căutare fie în antetul fie în conținut.
Cel mai simplu mod de a crea formularul de căutare proprii, presupunând că doriți să păstrați formularul standard în forma sa inițială - este de a crea un nou șablon de pagină cu un formular de căutare, codificate la specificațiile dumneavoastră, și se leagă-l la o anumită pagină.
Dacă doriți să actualizați formularul de căutare prestabilit - pentru a rula o căutare pentru expresii, de exemplu - atunci în acest caz aveți două opțiuni pentru a proceda; în acest caz, vom presupune că în șablonul dvs. formularul de căutare nu este codat greu:
- Prima opțiune este să plasați o formă de căutare arbitrară în șablonul searchform.php. Ori de câte ori funcția get_search_form () este apelată, va folosi mai întâi acest șablon.
- A doua opțiune este utilizarea filtrului get_search_form, care obligă WordPress să se refere la formularul de căutare arbitrar.
Ambele tehnici sunt descrise în detaliu în cod.
Când o formă arbitrară nu este suficientă
În ciuda faptului că, cu ajutorul unei forme arbitrare de căutare, este posibil să se facă foarte, foarte mult, uneori nu este suficient. Există cazuri în care trebuie să creați propriul dvs. WP_Query și să procesați rezultatele dvs. - în special atunci când adăugați o funcție de căutare suplimentară.
Exemplul nostru se va referi la site-ul comercial al companiei, care vinde un amestec de bunuri fizice și digitale. Majoritatea produselor digitale sunt emisiuni anterioare ale a două reviste care au fost emise împreună cu broșuri în format digital și tipărit.
Compania dorește să implementeze o căutare în bibliotecă, care va permite vizitatorilor să caute numai reviste și broșuri pentru anumite fraze. Site-ul a implementat deja o căutare pentru produse, dar rezultatele nu au fost foarte bune:
- Au fost prea multe rezultate irelevante
- Include toate produsele
- Nu a existat nici o indicație cu privire la ce termen de căutare a fost găsit, rezultatele căutării au fost imaginile obișnuite ale bunurilor
Pentru a nu atinge căutarea curentă, a fost creată o nouă funcție care:
Primele două cerințe ar putea fi implementate utilizând un formular de căutare arbitrar:
Cu toate acestea, nu a putut ajuta la marcarea rezultatelor căutării și la evidențierea expresiilor de căutare, astfel încât a fost creat un nou șablon de pagină care să fie conectat la o pagină separată.
Iată logica de bază a șablonului:
După cum puteți vedea, formularul de căutare seamănă cu un formular standard de căutare în WordPress, deoarece toate manipulările cu apelul WP_Query sunt efectuate prin cod în care:
Este important de menționat că în această soluție nu există paginare. Pentru o căutare arbitrară, specifică, paginarea nu este atât de necesară, mai ales dacă se efectuează o căutare frază.
Este posibil să observați că în cazul în care rezultatele căutării lipsesc, atunci în acest caz vor fi afișate pe ecran câteva produse similare, astfel încât vizitatorul să nu părăsească pagina.
Rezultatul rezultatelor necesită adăugarea a două funcții suplimentare - una pentru recuperarea textului care conține fraza de căutare, iar celălalt pentru evidențierea expresiei.
Evidențiarea frazelor este implementată folosind o expresie regulată simplă.
Obținerea textului care conține expresia de căutare nu a fost cea mai ușoară acțiune. Acest lucru a fost mult facilitat de faptul că conținutul fiecărui produs este afișat ca o listă neordonată cu un titlu și o descriere, dar încercarea de a găsi expresia regulată corespunzătoare nu sa încheiat cu nimic, așa că am decis să mă aplice procesării liniilor.
Rezultatul a fost totuși destul de bun:
Formele arbitrare sunt ideale atunci când doriți să implementați o căutare suplimentară
Formatele și funcțiile de căutare arbitrare sunt ideale dacă doriți să adăugați o funcție de căutare suplimentară care va funcționa în paralel cu funcția de căutare principală și va avea anumite limitări.
În majoritatea cazurilor, puteți implementa ceea ce aveți nevoie utilizând un formular de căutare arbitrar care transmite parametrii corespunzători funcției de căutare încorporată. Puteți testa cu ușurință utilizarea parametrilor prin adăugarea lor la adresa URL de căutare.
Merită menționat faptul că scrierea propriei funcții de căutare nu este cea mai dificilă sarcină. Puteți utiliza opțiunile avansate pentru a controla comportamentul de căutare.