Zoals ik in de inleiding van deze serie heb geschetst, de WP_Query
klas heeft vier hoofdelementen:
In deze tutorial laat ik je zien hoe je de loop gebruikt WP_Query
, inclusief de twee belangrijkste manieren om uw lus te structureren en hoe u meerdere lussen kunt gebruiken.
Zonder een lus wordt er niets op uw pagina weergegeven. Nadat WordPress de query heeft uitgevoerd, met behulp van de argumenten die u hebt gedefinieerd, moet vervolgens worden verteld wat moet worden uitgevoerd uit de gegevens die worden opgehaald. Dit is waar de lus binnenkomt.
Dus de lus komt na uw vraag, en het gebruikt drie tags:
if ($ query-> have_posts ())
controleert of er berichten zijn.while ($ query-> have_posts ())
herhaalt de lus voor elk bericht zolang er berichten zijn die kunnen worden opgehaald.$ Query-> the_post ()
toegang tot die specifieke post.Dus dit is waar de lus in past WP_Query
klasse:
have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); // Inhoud van de opgevraagde resultaten van de post ga hier naartoe. // Oorspronkelijke berichtgegevens herstellen. wp_reset_postdata (); ?>
Na het uitvoeren van de lus, is het enige dat overblijft om te doen het opruimen met behulp van wp_reset_postdata ()
.
De manier waarop uw lus is gestructureerd, is afhankelijk van welke gegevens u uit uw bericht wilt weergeven. Hier is een voorbeeld-lus die de berichttitel, de afgebeelde afbeelding en een uittreksel uitvoert. Je zou een lus als deze op een archiefpagina gebruiken.
have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); ?>> "title =""> "title ="">
Deze lus geeft precies weer wat ik hierboven heb beschreven: de afgebeelde afbeelding, titel en uittreksel.
Maar soms wilt u misschien een kop toevoegen voor uw lijst met berichten, of wilt u ze allemaal in een element opnemen. Als u dit eenvoudig voor uw lus hebt toegevoegd, wordt het uitgevoerd ongeacht of de query daadwerkelijk gegevens heeft geretourneerd, wat betekent dat u een kop met niets eronder zou kunnen hebben, of een aantal onnodige markeringen.
Dit is heel gemakkelijk om rond te komen door het insluitende element of de kop in je te plaatsen als
label:
have_posts ()) echo ''; echo ' '. __ ('Heading', 'tutsplus'). '
'; // Start een lus over de queryresultaten. while ($ query-> have_posts ()) $ query-> the_post (); ?>> "title =""> "title =""> '; // Oorspronkelijke berichtgegevens herstellen. wp_reset_postdata (); ?>
Hier kunt u zien dat ik heb gecontroleerd of er berichten zijn opgehaald door mijn query en of er een element met een element is geopend en een kop is toegevoegd.
Dit is ook handig als u de resultaten van uw query als een lijst wilt weergeven. Stel dat ik een lijst met alle berichten in een bepaalde categorie wil maken. De ul
element zit niet in mijn lus omdat het geen betrekking heeft op een specifiek bericht, maar ik wil het alleen uitvoeren als er berichten zijn. Dus ik gebruik dit:
'category-slug', 'post_type' => 'post'); // Aangepaste zoekopdracht. $ query = new WP_Query ($ args); // Controleer of we queryresultaten hebben. if ($ query-> have_posts ()) echo '
Hiermee wordt gecontroleerd of de query berichten heeft opgehaald en zo ja, wordt de ul
element en voert dan de lus uit.
Het is belangrijk om je ervan bewust te zijn dat terwijl je kunt gebruiken WP_Query
om meer dan één lus uit te voeren, moet u de berichtgegevens opnieuw instellen en een tweede exemplaar van WP_Query
om dit te doen. Dit komt omdat elk van uw lussen gegevens uitvoert op basis van verschillende argumenten.
In dit voorbeeld worden het fragment en de afgebeelde afbeelding voor het eerste bericht weergegeven en vervolgens alleen de titel van elk volgend bericht:
'post', 'posts_per_page' => '1'); // Eerste aangepaste zoekopdracht. $ query1 = nieuwe WP_Query ($ args1); // Controleer of we queryresultaten hebben. if ($ query1-> have_posts ()) // Start het doorlopen van de queryresultaten. while ($ query1-> have_posts ()) $ query1-> the_post (); ?>> "title =""> "title =""> '1', 'post_type' => 'post'); // Tweede aangepaste zoekopdracht. $ query2 = nieuwe WP_Query ($ args2); // Controleer of we queryresultaten hebben. if ($ query2-> have_posts ()) echo '
Ik heb hier twee belangrijke argumenten gebruikt:
'posts_per_page' => '1'
, gebruikt bij de eerste query, geeft alleen het meest recente bericht weer.'offset' = '1'
, gebruikt bij de tweede query, slaat het eerste bericht over en zorgt ervoor dat het niet wordt herhaald in de onderstaande lijst.ul
element en omsluit elke titel van het bericht in a li
element en een link naar zijn pagina.Je zult ook merken dat ik het gebruikte wp_reset_postdata ()
na beide lussen. Als ik dit niet had gedaan, zou de tweede lus nog altijd gegevens van de eerste uitvoeren.
Zonder een lus, WP_Query
doet niet echt veel. De lus is de code die u gebruikt om de gegevens weer te geven die WordPress uit de database heeft opgehaald op basis van uw queryargumenten.
Zoals ik heb aangetoond, zijn er een paar variaties op de lus. Een eenvoudige lus zal alleen alle berichten uitvoeren in de volgorde die u in uw queryargumenten hebt opgegeven (of standaard in aflopende volgorde op datum). Als je scheidt if ($ query-> have_posts ())
en while ($ query-> have_posts ())
, u kunt buiten uw loop extra markeringen invoegen, maar alleen als uw query gegevens heeft geretourneerd. En tenslotte door alternatieve argumenten te specificeren en te gebruiken wp_reset_postdata ()
na elke lus kunt u gebruiken WP_Query
meer dan eens om meerdere loops op uw pagina te maken.