W tym wpisie stworzymy wyszukiwarkę WordPress i zaprogramujemy stronę z wynikami. Dokonamy filtrowania i sortowania aby spełnić wymagające przypadki użycia tej przydatnej i natywnej funkcji WordPressa.
Wyszukiwarka może być przydatna w rozbudowanych serwisach i stronach z obszernym katalogiem produktów bądź bazą wiedzy.
Tworzenie formularza lokalnej wyszukiwarki
Aby móc skorzystać z dobrodziejstw lokalnej wyszukiwarki WordPress, należy stworzyć prosty formularz z jednym polem tekstowym i przyciskiem odpowiedzialnym za wysłanie frazy.
Wyszukiwarkę możemy wywołać za pomocą natywnej instrukcji z dokumentacji:
get_search_form();
W ten sposób w szablonie wyświetlimy prosty formularz z wyszukiwarką:

Jest to wygodne ale taka technika nie daje nam możliwości wygodnego dostosowania wyglądu formularza. W praktyce opłaca się dodać zwykły kod HTML:
<form role="search" method="get" id="searchform" class="searchform" action="<?php bloginfo("url"); ?>">
<div>
<label class="screen-reader-text" for="s">Szukaj:</label>
<input type="text" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Szukaj" />
</div>
</form>
Kiedy wprowadzimy coś do tak stworzonego formularza powinniśmy być odsyłani do adresu:
https://adres-strony.pl/?s=fraza
Wyświetlanie wyników z wyszukiwarki
Chcąc wyświetlić wyniki z wyszukiwarki, tworzymy plik search.php, w którym możemy zamieścić szukaną frazę:
<?php echo get_search_query(); ?>
Posty wyświetlimy za pomocą pętli:
global $post; $args = array( 's' => esc_html( get_search_query( false ) ), 'posts_per_page' => 32 ); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <div class="col-md-12"> <a href="<?php the_permalink(); ?>"><h3><?php the_title(); ?></h3></a> </div> <?php endforeach; wp_reset_postdata();?>
Sortowanie, organizacja wyników i dodawanie własnych zmiennych
Wyniki z wyszukiwarki można dowolnie sortować a w pętli z powyższego punktu można dodać dodatkowe argumenty, które zawężą wyniki do danej kategorii, wpisów czy innej niestandardowej funkcjonalności filtrowania. Jest to tak proste, że wcale nie trzeba do tego używać wtyczek.
Teoretycznie możemy stworzyć kilka formularzy do wyszukiwania czy to postów, załączników czy innych obiektów. Wystarczy do formularza dodać własne dodatkowe pole, niech to będzie <input type=”hidden” name=”cat” value=”programowanie”>. Wtedy, WordPress przejdzie do adresu:
https://adres-strony.pl/?s=fraza&cat="programowanie"
Za pomocą wbudowanej w WordPress metody get_query_var() możemy teraz pobrać zmienną cat i przefiltrować wyniki:
<?php $cat = get_query_var("cat");
Zmienną $cat można teraz użyć do przefiltrowania wyników. W argumencie metody get_posts() wystarczy dodać pola category_name, cała tablica z argumentami będzie więc wyglądała następująco:
$args = array(
's' => esc_html( get_search_query( false ) ),
'category_name' => $cat,
'posts_per_page' => 32 );
Można też wykorzystać inne parametry takie jak: sortowanie, daty publikacji, ID konkretnego autora czy tagu. Można też stworzyć rozbudowaną wyszukiwarkę – bo w końcu nie trzeba tych dodatkowych pól ukrywać:

Wystarczy do formularza dodać odpowiednio:
<input type="text" value="" name="cat" id="cat" /> <input type="text" value="" name="author" id="author" />
Za pomocą metody GET, dane zostaną dodane do adresu URL a my możemy wszystkie zmienne pobrać metodą get_query_var() i uwzględnić w pętli z wynikami.
Kwestie SEO
Należy pamiętać o szalenie istotnej rzeczy, która jest charakterystyczna dla stron wygenerowanych z wewnętrznej wyszukiwarki. Strony te nie mogą być indeksowane w Google. W nagłówku strony należy umieścić dyrektywę „noindex” dla robotów:
<meta name="robots" content="noindex">
Źródła
https://developer.wordpress.org/reference/functions/get_search_form/
https://www.seroundtable.com/google-block-search-results-pages-24279.html
Odpowiedz lub skomentuj