Funkcja wyszukiwania WordPress jest bardzo złośliwa i dostępnych jest wiele wtyczek do dodawania ulepszeń, ale nie zawsze zapewniają to, czego chcesz, zwłaszcza jeśli próbujesz zbudować drugorzędną wyszukiwarkę, która ma określone wymagania.

W tym artykule przyjrzymy się, jak łatwo jest zbudować własne niestandardowe wyszukiwanie WordPress i odkryć zaskakujące tajemnice wyszukiwania WordPress po drodze.

Photo of AMC Javelin customized blue hardtop with supercharged AMC V8.
Pimp your WordPress search!

Pomimo licznych wtyczek, które poprawią wyszukiwanie WordPress od zamawiania według trafności do dodawania wyszukiwania facetowego do włączania niestandardowych pól w wyszukiwaniu, zdarzają się sytuacje, w których jakakolwiek kombinacja wtyczek nie zrobi dokładnie tego, co chcesz i nie masz opcji, jak tylko pobrudzić sobie ręce i napisać własne.

W tym artykule przeprowadzę Cię przez niestandardowe studium przypadku wyszukiwania. Przekonasz się, że nie jest tak trudno zbudować własną stronę wyszukiwania i odkryjesz kilka ukrytych, być może, funkcji wbudowanej funkcji wyszukiwania.

Ale zanim to zrobię, rzućmy okiem na to, co możesz osiągnąć po prostu łącząc swój własny formularz wyszukiwania.

Rozszerzenie Wyszukiwania WordPress Poprzez Rozszerzony Formularz Wyszukiwania

Za wyszukiwarką WordPress siedzi WP_Query klasy. Jeśli wcześniej pracowałeś z własnymi niestandardowymi pętlami, prawdopodobnie będziesz zaznajomiony z WP_Query.

WP_Query ma stos możliwych parametrów, z których wiele można po prostu podać w formularzu wyszukiwania (lub bezpośrednio na adresie URL), który zmieni zachowanie wyszukiwania.

Na przykład, aby zmienić normalne wyszukiwanie w wyszukiwanie niestandardowego typu postu o nazwie produkt:

http://www.yoursite.com/?s=football&post_type=product

 

To zwróci tylko wyniki dla produkt niestandardowe posty, w których tytuł lub treść zawiera słowo piłka nożna.

Jeśli spojrzysz przez WP_Query Lista parametrów (jest dość obszerna) znajdziesz cały szereg parametrów opartych na łańcuchach i liczbach całkowitych, które możesz po prostu kodować na adresie URL, aby zmienić zachowanie wyszukiwania z WŁĄCZANIA i wyłączania kategorii, do dodawania wyszukiwania taksonomicznego do ograniczania wyszukiwania do niektórych autorów.

[Pamiętaj, jest to tylko Wyszukiwanie, jeśli s parametr jest zawarty w adresie URL.]

Istnieje również kilka dodatkowych parametrów, których nie znajdziesz na liście, które mogą radykalnie zmienić zachowanie, a mimo to, o dziwo, nie są udokumentowane w Kodeksie.

Szukaj Po Frazie

Domyślnie WordPress wyszukuje według słowa kluczowego. Oznacza to, że po przejściu zapytania buty piłkarskie, WordPress buduje następujące dla klauzuli WHERE:


((wp_posts.post_title jak ' % football%') lub
(wp_posts.post_content LIKE '%football%'))
Oraz
((wp_posts.post_title jak ' % boots%') lub
(wp_posts.post_content jak '%boots%'))

Jak widać, nie jest to szukanie frazy, ale szukanie piłka nożna w tytule lub treści oraz buty w tytule lub treści. Więc post, który ma boot w tytule i piłka nożna w treści będzie pasować, co prawdopodobnie nie jest tym, czego naprawdę szuka wyszukiwarka.

Możesz jednak zmusić WordPress do wyszukiwania frazy, po prostu dodając zdanie=1 do adresu URL, który zmienia klauzulę WHERE na:


((wp_posts.post_title jak ' % buty piłkarskie%') lub
(wp_posts.post_content LIKE ' % buty piłkarskie%'))

Teraz wyszukiwanie jest dla frazy i tytuł lub treść musi faktycznie zawierać buty piłkarskie do odnalezienia. Wypróbuj to na własnej stronie, wyszukując, a następnie dodając & zdanie=1 do adresu URL i zobacz, jaka to różnica w wynikach.

Znalezienie Dokładnego Dopasowania

Związane z zdanie ale jeszcze bardziej szczegółowe jest dokładny. Dodawanie exact=1 do adresu URL zmienia klauzulę WHERE na:


((wp_posts.post_title jak 'buty piłkarskie') lub
(wp_posts.post_content jak 'buty piłkarskie'))

Zamiast grać na miejscu różnica, powiem ci, że jedyna różnica między zdanie Klauzula WHERE i dokładny Gdzie klauzula polega na usunięciu % wokół frazy w podobnych wypowiedziach. To usunięcie robi jednak dużą różnicę, ponieważ teraz tytuł lub treść musi pasować do zapytania, a nie tylko go zawierać.

Tak więc, jeśli żaden produkt nie ma tytułu buty piłkarskie wtedy nie będzie żadnych rezultatów. Użycie dokładny ostrożnie.

Dostosowywanie Formularza Wyszukiwania

Domyślny formularz wyszukiwania WordPress jest bardzo prosty:

<form role= “search” method= ” get “id =” searchform “class = “searchform”action=” http://www.test.dev/”>
<div>
< label class=”screen-reader-text” for=”s”>Szukaj:< / label>
<input type = “text” value = “”name=” s “id = “s” / >
<input type = “submit” id = “searchsubmit”value=” Search” />
< / div>
< / form>

 

Jeśli chcemy zmienić zachowanie wyszukiwania, wystarczy dodać własne pola do formularza.

< form role= “search” method = ” get “id = “searchform”action=” http://www.test.dev/”>
<div>
< label for=”s”>Szukaj: < / label>
<input type = “text” value = “”name=” s “id = “s” / >
<input type = “hidden” value = ” 1 “name= “sentence” / >
<input type = “hidden” value = “product” name= “post_type” / >
<input type = “submit” id = “searchsubmit”value=” Search” />
< / div>
< / form>

 

Ten formularz wyszukiwania, po przesłaniu, wygeneruje następujący adres URL:

http://www.test.dev/?s={zapytanie} & zdanie = 1&post_type=produkt

Nadal będzie wywoływać domyślną stronę wyników wyszukiwania, ale wyniki te będą dotyczyć niestandardowych typów postów produktów, które zawierają wyszukiwaną frazę w tytule lub treści.

Najprostszym sposobem na zbudowanie własnego formularza wyszukiwania, zakładając, że chcesz pozostawić domyślny formularz w stanie, w jakim jest, jest utworzenie nowego szablonu strony z formularzem wyszukiwania zakodowanym zgodnie z Twoimi wymaganiami i przypisanie go do konkretnej strony.

Jeśli jednak chcesz zaktualizować domyślny formularz wyszukiwania – na przykład, aby uruchomić wyszukiwanie fraz – masz dwie opcje, zakładając, że Twój szablon nie zakodował na stałe formularza wyszukiwania w szablonie:

  1. Pierwszym z nich jest umieszczenie niestandardowego formularza wyszukiwania w pliku szablonu o nazwie formularz wyszukiwania.php. Ilekroć get_search_form() funkcja nazywa się to będzie szukać, i użyć, ten szablon jako pierwszy.
  2. Drugim jest użycie get_search_form filtr do zastąpienia, aby zmusić WordPress do korzystania z niestandardowego formularza wyszukiwania.

Obie te techniki są szczegółowo opisane w Kodeksie WordPress.

Gdy Forma Niestandardowa To Za Mało

Chociaż możesz zrobić wiele z niestandardowym formularzem, istnieją scenariusze, w których musisz zbudować swój WP_Query i samodzielnie obsługiwać wyniki, w szczególności gdy dodajesz drugą funkcję wyszukiwania.

Kontekst Studium Przypadku

To studium przypadku dotyczy witryny e-commerce dla organizacji, która sprzedaje mieszankę produktów fizycznych i cyfrowych. Większość produktów cyfrowych to Zeszyty dwóch czasopism wraz z książeczkami zarówno w formacie papierowym, jak i cyfrowym.

Organizacja chciała zapewnić” biblioteczną ” wyszukiwarkę, która umożliwiłaby odwiedzającym przeszukiwanie tylko czasopism i broszur pod kątem określonych fraz (czasopisma mają pełną listę treści w treści). Chociaż strona miała już wyszukiwanie produktów, wyniki były mniej satysfakcjonujące, ponieważ:

  • często miał zbyt wiele nieistotnych wyników
  • w zestawie wszystkie produkty
  • nie wskazywał, gdzie szukany termin został dopasowany, wyniki wyszukiwania były tylko obrazem produktu

W celu pozostawienia bieżących wyszukiwań w takcie, zbudowano nową funkcję wyszukiwania, która:

  • wymuszone wyszukiwanie według frazy, a nie słowa kluczowego
  • ograniczono wyszukiwanie tylko do kategorii czasopism i broszur
  • wyświetlanie i podświetlanie tekstu zawierającego szukaną frazę dopasuj

Pierwsze dwa wymagania można rzeczywiście osiągnąć za pomocą następującego niestandardowego formularza wyszukiwania:

< form role= “search” method = ” get “id = “searchform”action=” http://www.test.dev/”>
<div>
< label for=”s”>Szukaj: < / label>
<input type = “text” value = “”name=” s “id = “s” / >
<input type = “hidden” value = ” 1 “name= “sentence” / >
<input type = “hidden” value = “product” name= “post_type” / >
<input type = “hidden” value = “product_cat” name= “czasopisma, Książki” / >
<input type = “submit” id = “searchsubmit”value=” Search” />
< / div>
< / form>

Jednak nie pomogłoby to w układzie listy wyszukiwania i podświetlaniu szukanej frazy, więc zbudowano nowy szablon strony i przypisano go do nowej dedykowanej strony.

Oto główna logika w szablonie:

Jak widać formularz jest prawie standardowym formularzem WordPress, ponieważ wszystkie manipulacje WP_Query wywołanie odbywa się poprzez kodowanie, gdzie:

  • post_type jest ustawiony na produkt
  • zdanie jest ustawiony na 1, aby uruchomić wyszukiwanie fraz
  • dodano parametr taksonomii, aby ograniczyć wyszukiwanie do trzech kategorii produktów
  • kolejność jest ustawiona na datę i menu_order malejąco
  • wszystkie posty mają zostać zwrócone

Ważne jest, aby pamiętać, że w tym rozwiązaniu nie ma stronicowania. W przypadku niestandardowego, konkretnego wyszukiwania nie zawsze będzie to konieczne do paginacji, zwłaszcza jeśli zostanie uruchomione wyszukiwanie fraz.

Once the WP_Query jest wykonywana jest to kwestia wyprowadzenia jakichkolwiek wyników wyszukiwania. Zauważysz, że jeśli nie ma wyników wyszukiwania, zamiast tego wyświetlanych jest kilka powiązanych produktów, aby spróbować utrzymać odwiedzającego na stronie.

Wyprowadzanie wyników wymaga dwóch dodatkowych funkcji, jednej do wyciągnięcia tekstu zawierającego pasującą frazę wyszukiwania, a drugiej do podkreślenia samej frazy.

Podkreślenie wyrażenia jest osiągane tylko za pomocą prostego wyrażenia regularnego.

Wyciągnięcie tekstu zawierającego wyszukiwaną frazę nie było takie proste. Było to w dużym stopniu wspomagane przez fakt, że zawartość każdego produktu stosowała standardowe podejście do wyświetlania treści na liście nieuporządkowanej z nagłówkiem i opisem, ale próba znalezienia wyrażenia regularnego, aby wyciągnąć element listy, okazała się poza mną, więc uciekłem się do manipulacji ciągiem znaków.

Wynik jest jednak całkiem dobry:

Screenshot of a search results page with phrase highlighting
Wyszukiwanie po frazie zamiast słowa kluczowego znacznie poprawia wyniki

Niestandardowe Idealne, Gdy Chcesz Drugie Wyszukiwanie

Niestandardowe formularze i funkcje wyszukiwania są idealne, gdy chcesz dodać drugą funkcję wyszukiwania, która działa obok głównej funkcji wyszukiwania i ma naprawdę specyficzne wymagania.

W wielu scenariuszach możesz osiągnąć to, co chcesz, po prostu mając niestandardowy formularz wyszukiwania, który przekazuje odpowiednie parametry do wbudowanej funkcji wyszukiwania. Możesz to łatwo przetestować przed rozpoczęciem tworzenia własnej niestandardowej funkcji wyszukiwania, dodając odpowiednie zmienne zapytania do standardowego adresu URL wyszukiwania i sprawdzając, czy otrzymasz wymagane wyniki.

To powiedziawszy, kodowanie własnej funkcji wyszukiwania nie jest trudne i daje dostęp do jeszcze większego zakresu parametrów do kontrolowania zachowania wyszukiwania.

Czy natknąłeś się na sytuację, w której potrzebujesz spersonalizowanego wyszukiwania? Znalazłeś wtyczkę, która Ci pomoże, czy zbudowałeś własną?

Tagi:

You May Also Like

Jak naprawić nieprawidłowy błąd JSON w WordPress (Przewodnik dla początkujących)

W artykule: Co powoduje błąd “nieprawidłowa odpowiedź JSON” w WordPress?1. Sprawdź adresy…

Jak naprawić błąd krytyczny w WordPress (krok po kroku)

W artykule: Co To jest błąd krytyczny w WordPress?Co powoduje krytyczny błąd…

Jak zmienić kolor linku w WordPress (poradnik dla początkujących)

W artykule: Dlaczego Linki Są Ważne?Jak dodawać linki w postach i stronach…

9 Najlepsze Darmowe Wtyczki WordPress Author Bio Box

W artykule: 1. Simple Author Box2. Branda3. Autor postu WP4. Author Bio…