Interogări personalizate WordPress – mai multe bucle

Publicat: 2021-01-29

În cele mai multe cazuri, când construiți un site web cu WordPress, tema pe care o activați va afișa în mod implicit o pagină principală care listează postările dvs. recente, cu excepția cazului în care alegeți să afișați o pagină statică din opțiunile de administrare din Setări > Citire. Dar dacă doriți să afișați o gamă diferită de conținut care nu era nici o pagină statică, nici cele mai recente postări ale dvs.? Din fericire, acest lucru este posibil folosind bucle multiple WordPress.

Să vedem cum se poate realiza acest lucru!

Utilizați mai multe bucle pe pagina dvs. de pornire WordPress

Înainte de a începe, merită remarcat faptul că ar trebui să efectuați aceste modificări propriului site web folosind o temă secundară, deoarece vom edita fișierele șablon ale temei dvs. Dacă nu faceți acest lucru, veți descoperi că veți pierde orice modificări pe care le faceți data viitoare când vă actualizați tema. Puteți afla mai multe despre temele pentru copii aici.

Indiferent de tema pe care o utilizați, fișierul PHP corespunzător pentru pagina de pornire va include o buclă standard care afișează unele postări (în majoritatea cazurilor acestea vor fi postări publicate recent). În tema Twenty Twenty, de exemplu, veți găsi codul care controlează acest lucru în fișierul index.php în jurul liniei 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() ); } }

Într-o buclă standard ca aceasta, sunt utilizate două variabile globale importante:

  • $wp_query , care este un obiect de clasă WP_Query și deține un rezultat al interogării bazei de date WP
  • $post care este obiectul actual al clasei WP_Post .

În fragmentul de cod de mai sus, verificăm mai întâi dacă există postări de afișat cu funcția globală have_posts() și, dacă da, repetăm ​​aceste postări într-o buclă while. Funcția globală the_post() este cea care iterează prin postări care îi spun lui WordPress să meargă la următoarea postare.

Dacă doriți să vedeți aceste funcții și clase în detaliu, le puteți găsi în fișierul wp-includes/class-wp-query.php .

În scopul exemplului nostru, am activat tema Twenty Twenty și apoi am creat 6 postări într-o categorie numită „Categoria 1” și 5 posturi de servicii sub o categorie numită „Servicii”.

Pentru a menține lucrurile mai ușoare, vom păstra codul buclei cât mai simplu posibil, afișând doar o listă cu titlurile Postărilor.

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

Aceasta înseamnă că în pagina noastră de pornire vom vedea ceva de genul acesta:

Noțiuni introductive Personalizarea ieșirii paginii de pornire

După cum am văzut din captura de ecran de mai sus, dacă ne vizităm „prima pagina”, vom vedea cele mai recente 10 postări, indiferent de categoriile care le-au fost atribuite.

Vom continua acum cu crearea propriului șablon personalizat de pagină de pornire, unde vom include rezultate personalizate.

Pentru a face acest lucru, creați un fișier numit custom-homepage.php și salvați-l în folderul temei dvs. Adăugați următorul cod la această pagină:

 <?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();

Apoi, mergeți la administratorul WordPress și creați o pagină numită „Pagina mea de pornire” și selectați „Șablonul personalizat de pagină de pornire” din meniul drop-down Șablon ca șablon.

Apoi, pentru ca aceasta să fie pagina de pornire implicită, va trebui să o selectați în meniul Setări (Setări > Citire > O pagină statică).

În acest moment, dacă aruncați o privire pe pagina dvs. de pornire, ar trebui să vedeți doar titlul paginii atunci când este vizualizat din partea din față a site-ului dvs.

Acum avem această configurație, să adăugăm câteva interogări la șablonul nostru „Șablonul meu personalizat de pagină de pornire”.

Adăugarea de interogări personalizate

Scopul nostru în acest exemplu va fi să afișăm unele dintre cele mai recente postări ale noastre din toate categoriile. Mai jos vom afișa postări dintr-un tip de postare personalizat numit „cărți”. Dacă nu știți cum să configurați tipuri de postări personalizate, consultați articolul „Creați manual tipuri de postări personalizate WordPress”. Includerea unui tip de postare personalizat este, desigur, complet opțională. Dacă nu doriți să faceți acest lucru, săriți peste pașii în care ne referim la acest tip de postare.

Să începem prin a înlocui bucla curentă (găsită în index.php în jurul liniei 79) cu aceasta:

 $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;

Această buclă va însemna că pagina ta de pornire va afișa acum cele mai recente 8 postări ale tale (după cum se arată mai jos):

Apoi, dacă doriți să includeți tipul de postare personalizat „cărți” (sau orice alt tip de postare personalizată, de altfel), vom adăuga o a doua buclă pentru postările cărții chiar sub prima buclă, astfel:

 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;

Mergeți la partea din față a site-ului dvs. și reîmprospătați pagina pentru a confirma că totul funcționează conform așteptărilor.

Împărțiți o interogare personalizată în părți

Poate fi util să împărțiți o interogare personalizată în părți. Un motiv pentru a face acest lucru ar fi dacă doriți să „întrerupeți” prima interogare afișând postări din altă categorie sau tip de postare înainte de a relua bucla inițială. Acest lucru este util dacă, de exemplu, doriți să afișați cele mai recente postări dintr-o categorie și apoi să afișați alt conținut înainte de a încheia în cele din urmă cu mai multe „cele mai recente postări” pentru a încheia pagina.

Să sărim în asta. Pentru a începe, ștergeți conținutul fișierului custom-homepage.php care l-am folosit anterior și adăugați codul de mai jos.

 <?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();

În prima buclă recuperăm 3 postări din categoria Servicii. Pentru a relua postările din categoria Servicii în a treia buclă, evitând în același timp duplicatele, definim un offset => 3 . Aceasta ar însemna că vom vedea următoarele:

Desigur, puteți modifica valoarea offset-ului la orice număr doriți.

Adăugați postări personalizate la interogarea Cele mai recente postări

Ce se întâmplă dacă dorim să includem postările de carte în cele mai recente postări de pe pagina de pornire? Bucla implicită nu include în mod implicit postări personalizate. Iată cum putem remedia acest lucru.

Pentru această secțiune vom seta setările de citire pentru pagina de pornire la „Ultimele postări ale tale”.

Traseul de urmat aici este utilizarea cârligului pre_get_posts . Acest cârlig este introdus în fișierul wp-includes/class-wp-query.php și este folosit pentru a personaliza obiectul $query și bucla principală WordPress după cum credeți de cuviință. Se execută după ce obiectul variabilă de interogare este creat, dar înainte ca interogarea reală să fie executată.

Deschideți fișierul functions.php al temei active și introduceți următorul cod la sfârșit:

 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' );

Ceea ce face acest cod în condiția if este să se asigure că modificările sunt aplicate în pagina de pornire numai în timp ce interogarea principală rulează.

Dacă vă vizitați acum pagina principală, veți observa că în cele mai recente postări sunt incluse și postările personalizate din „carte”.

Concluzie

Aproape fără excepție, orice trebuie să realizați în ceea ce privește conținutul paginii dvs. de pornire WordPress este posibil. După cum am arătat aici, utilizarea buclelor multiple WordPress este o modalitate puternică de personalizare a ieșirii care apare pe pagina dvs. de pornire. Abordarea noastră aici este doar una dintre multe. WordPress oferă niveluri incredibile de control asupra rezultatelor care apar pe site-ul tău. Experimentează cu instrumentele pe care le oferă pentru a obține ceea ce îți dorești!