Niestandardowe zapytania WordPress – wiele pętli

Opublikowany: 2021-01-29

W większości przypadków podczas tworzenia witryny internetowej za pomocą WordPress aktywowany motyw domyślnie wyświetla stronę główną z listą ostatnich postów, chyba że zdecydujesz się wyświetlić stronę statyczną w opcjach administratora w obszarze Ustawienia > Czytanie. Ale co, jeśli chcesz wyświetlić inny zakres treści, który nie jest ani statyczną stroną, ani Twoimi najnowszymi postami? Na szczęście jest to możliwe przy użyciu WordPress Multiple Loops.

Zobaczmy, jak można to osiągnąć!

Użyj wielu pętli na swojej stronie głównej WordPress

Zanim zaczniemy, warto zauważyć, że te modyfikacje należy przeprowadzić na własnej stronie internetowej za pomocą motywu podrzędnego, ponieważ będziemy edytować pliki szablonów motywu. Jeśli tego nie zrobisz, przy następnej aktualizacji motywu stracisz wszelkie modyfikacje. Możesz dowiedzieć się więcej o motywach potomnych tutaj.

Bez względu na motyw, którego używasz, odpowiedni plik PHP dla strony głównej będzie zawierał standardową pętlę wyświetlającą niektóre posty (w większości przypadków będą to ostatnio opublikowane posty). Na przykład w motywie Twenty Twenty kod, który to kontroluje, znajduje się w pliku index.php wokół linii 79.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

W standardowej pętli takiej jak ta używane są dwie ważne zmienne globalne:

  • $wp_query , który jest obiektem klasy WP_Query i przechowuje wynik zapytania bazy danych WP
  • $post , który jest bieżącym obiektem klasy WP_Post .

W powyższym fragmencie kodu najpierw sprawdzamy, czy są jakieś posty do wyświetlenia za pomocą funkcji globalnej have_posts() , a jeśli tak, iterujemy przez te wpisy w pętli while. Globalna funkcja the_post() to ta, która iteruje przez posty informujące WordPressa, aby przeszedł do następnego posta.

Jeśli chcesz zobaczyć te funkcje i klasy w szczegółach, możesz je znaleźć w pliku wp-includes/class-wp-query.php .

Na potrzeby naszego przykładu aktywowaliśmy motyw Twenty Twenty, a następnie utworzyliśmy 6 postów w kategorii o nazwie „Category 1” i 5 postów serwisowych w kategorii o nazwie „Usługi”.

Aby wszystko było proste, kod pętli będzie tak prosty, jak to tylko możliwe, wyświetlając tylko listę tytułów postów.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

Oznacza to, że na naszej stronie głównej zobaczymy coś takiego:

Pierwsze kroki Dostosowywanie wyników naszej strony głównej

Jak widzieliśmy na powyższym zrzucie ekranu, jeśli odwiedzimy naszą „stronę główną”, zobaczymy 10 najnowszych postów niezależnie od przypisanych im kategorii.

Przystąpimy teraz do tworzenia własnego niestandardowego szablonu strony głównej, w którym uwzględnimy niestandardowe dane wyjściowe.

Aby to zrobić, utwórz plik o nazwie custom-homepage.php i zapisz go w folderze swojego motywu. Dodaj następujący kod do tej strony:

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

Następnie przejdź do administratora WordPress i utwórz stronę o nazwie „Moja strona główna” i wybierz „Mój niestandardowy szablon strony głównej” z menu rozwijanego Szablon jako szablon.

Następnie, aby ustawić ją jako domyślną stronę główną, musisz ją wybrać w menu Ustawienia (Ustawienia > Czytanie > Strona statyczna).

W tym momencie, jeśli spojrzysz na swoją stronę główną, powinieneś zobaczyć tylko tytuł strony oglądany z przodu witryny.

Teraz mamy tę konfigurację, dodajmy kilka zapytań do naszego szablonu „Mój niestandardowy szablon strony głównej”.

Dodawanie niestandardowych zapytań

Naszym celem w tym przykładzie będzie wyświetlenie niektórych z naszych najnowszych postów ze wszystkich kategorii. Poniżej wyświetlą się posty z niestandardowego typu postów o nazwie „książki”. Jeśli nie wiesz, jak skonfigurować niestandardowe typy postów, przejdź do artykułu „Ręczne tworzenie niestandardowych typów postów WordPress”. Dołączenie niestandardowego typu posta jest oczywiście całkowicie opcjonalne. Jeśli nie chcesz tego robić, po prostu pomiń kroki, w których odnosimy się do tego typu posta.

Zacznijmy od zastąpienia bieżącej pętli (znajdującej się w index.php w okolicach linii 79) tą:

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Ta pętla będzie oznaczać, że na Twojej stronie głównej będzie teraz wyświetlanych 8 najnowszych postów (jak pokazano poniżej):

Następnie, jeśli chcesz dołączyć „książki” typu niestandardowego posta (lub dowolny inny niestandardowy typ posta w tym przypadku), dodamy drugą pętlę dla postów o książkach tuż pod pierwszą pętlą w następujący sposób:

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Przejdź do frontonu swojej witryny i odśwież stronę, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami.

Przerwij niestandardowe zapytanie w częściach

Przydatne może być rozbicie niestandardowego zapytania na części. Powodem takiego postępowania byłoby „przerwanie” pierwszego zapytania poprzez pokazanie wpisów z innej kategorii lub typu wpisu przed wznowieniem początkowej pętli. Jest to przydatne, jeśli na przykład chcesz pokazać najnowsze posty z kategorii, a następnie pokazać inną zawartość, zanim ostatecznie zakończysz z większą liczbą „najnowszych postów”, aby zakończyć stronę.

Przejdźmy do tego. Aby rozpocząć, usuń zawartość pliku custom-homepage.php , którego używaliśmy wcześniej, i dodaj poniższy kod.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

W pierwszej pętli pobieramy 3 posty z kategorii Usługi. Aby wznowić wpisy kategorii Usługi w trzeciej pętli, unikając duplikatów, definiujemy offset => 3 . Oznaczałoby to, że zobaczylibyśmy:

Oczywiście możesz zmienić wartość przesunięcia na dowolną liczbę.

Dodaj niestandardowe posty do najnowszego zapytania o posty

Co zrobić, jeśli chcemy dołączyć posty z książki do najnowszych postów na stronie głównej? Domyślna pętla domyślnie nie zawiera niestandardowych postów. Oto jak możemy to naprawić.

W tej sekcji ustawimy ustawienia czytania strony głównej na „Twoje najnowsze posty”.

Ścieżką, którą należy podążać, jest użycie haka pre_get_posts . Ten haczyk jest wprowadzony w pliku wp-includes/class-wp-query.php i służy do dostosowywania obiektu $query i głównej pętli WordPressa według własnego uznania. Jest wykonywany po utworzeniu obiektu zmiennej zapytania, ale przed faktycznym uruchomieniem zapytania.

Otwórz plik functions.php aktywnego motywu i wstaw na końcu następujący fragment kodu:

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

To, co ten kod robi w warunku if , polega na upewnieniu się, że modyfikacje są stosowane na stronie głównej tylko podczas działania głównego zapytania.

Jeśli teraz odwiedzisz swoją stronę główną, zauważysz, że najnowsze posty zawierają również niestandardowe posty „książkowe”.

Wniosek

Prawie bez wyjątku, wszystko, co musisz osiągnąć pod względem treści na swojej stronie głównej WordPress, jest możliwe. Jak pokazaliśmy tutaj, użycie WordPress Multiple Loops to potężny sposób na dostosowanie danych wyjściowych, które pojawiają się na Twojej stronie głównej. Nasze podejście tutaj jest tylko jednym z wielu. WordPress oferuje niesamowity poziom kontroli nad danymi wyjściowymi pojawiającymi się w Twojej witrynie. Eksperymentuj z narzędziami, które udostępniają, aby osiągnąć to, czego chcesz!