WordPress.org

talen: English • Français • Italiano • Loop Portugu Português do Brasil • Русский • 中文(简体) • 中文(繁體) • (add your language)

de loop is PHP-code die door WordPress wordt gebruikt om berichten weer te geven. Met behulp van de Loop, WordPress verwerkt elke post worden weergegeven op de huidige pagina, en formatteert het op basis van hoe het overeenkomt met de opgegeven criteria binnen de Loop tags. Elke HTML of PHP code in de lus zal worden verwerkt op elke post.

wanneer WordPress documentatie zegt” deze tag moet binnen de lus”, zoals voor specifieke Template Tags of plugins, zal de tag worden herhaald voor elke post. De lus geeft bijvoorbeeld standaard de volgende informatie weer voor elk bericht:

  • Title (the_title ())
  • Time (the_time ())
  • Categories (The_category ()).

u kunt andere informatie over elk bericht weergeven met behulp van de juiste sjabloontags of (voor gevorderde gebruikers) door toegang te krijgen tot de $post variabele, die is ingesteld met de informatie van het huidige bericht terwijl de lus draait.

voor een beginner kijk op de lus, zie de lus in Actie.

met behulp van de lus

moet de lus in de index van het thema worden geplaatst.php en in alle andere sjablonen gebruikt om post informatie weer te geven.

zorg ervoor dat de oproep voor de koptekst sjabloon bovenaan de sjablonen van uw thema staat. Als u De Lus in je eigen ontwerp (en uw eigen ontwerp is niet een sjabloon), ingesteld WP_USE_THEMES false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

De lus begint hier:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

en hier eindigt:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Dit is met behulp van PHP alternatieve syntaxis voor de controle-structuren, en kan ook worden uitgedrukt als:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Loop Voorbeelden

Stijl Berichten Van Categorie Anders

in Dit voorbeeld wordt elke post met de Titel (die wordt gebruikt als een link naar de Post Permalink), Categorieën en Inhoud. Het maakt het ook mogelijk berichten in een categorie met Categorie-ID ‘3’ anders worden gestyled. Om dit te bereiken wordt de Template In_category() gebruikt. Lees de commentaren zorgvuldig om te zien wat elk deel van de code doet.

Opmerking: alle HTML-code moet buiten de <staan?php ?> tags. En, PHP code (zelfs dingen zo eenvoudig als accolades: } ) moet in de <?php ?> tags. U kunt blokken PHP-code starten en stoppen om HTML-code te interspersen binnen if en else statements, zoals weergegeven in het bovenstaande voorbeeld.

Exclude Posts From Some Category

dit voorbeeld laat zien hoe een specifieke categorie of Categorieën niet getoond kan worden. In dit geval zijn posten uit de categorieën 3 en 8 uitgesloten. Het voorbeeld is anders dan het voorbeeld hierboven in dat het een wijziging in de query zelf maakt.

Opmerking: Als u dit voorbeeld gebruikt voor uw hoofdpagina, moet u een ander sjabloon gebruiken voor uw Categoriearchieven; anders zal WordPress alle berichten in Categorie 3 en categorie 8 uitsluiten, zelfs wanneer u dat Categoriearchief bekijkt! Echter, als je hetzelfde template bestand wilt gebruiken, kun je dit vermijden door de is_home() tag te gebruiken om ervoor te zorgen dat berichten uit Categorie 3 en categorie 8 alleen worden uitgesloten van de hoofdpagina:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

er zijn andere voorwaardelijke Tags die kunnen worden gebruikt om de uitvoer te controleren, afhankelijk van of een bepaalde voorwaarde Waar is met betrekking tot de gevraagde pagina.

objectoriëntatie

lussen zijn een combinatie van objectgeoriënteerd en globaal gedrag. Dit is in het begin verwarrend.

de twee belangrijke globale variabelen voor lussen zijn:

  • $wp_query, een object van klasse WP_Query, met een WP database query resultaat waaronder $wp_query – >posts, een array van individuele WP_Posts.
  • $post, het huidige object van klasse WP_Post

onthoud: alle sjabloontags vertrouwen standaard op de globale variabele $post en de globale variabele $post wordt ingesteld / gewijzigd door the_post (), die zijn gegevens krijgt van de globale variabele $wp_query. $post wordt ook ingesteld / gewijzigd door WP_Query:: the_post () zoals gebruikt in secundaire lussen.

meerdere lussen

deze sectie behandelt geavanceerd gebruik van de lus. Het is een beetje technisch, maar laat dat je niet afschrikken. We beginnen met een eenvoudig voorbeeld en werken vanaf daar verder. Met een beetje gezond verstand, geduld en enthousiasme kunt u ook meerdere loops doen.

Ten Eerste, waarom zou men meerdere lussen willen gebruiken? In het algemeen is het antwoord dat je misschien iets wilt doen met een groep berichten, en iets anders wilt doen met een andere groep berichten, maar beide groepen op dezelfde pagina weer te geven. “Iets” kan bijna alles betekenen; je wordt alleen beperkt door je PHP vaardigheid en je verbeelding.

we zullen in de voorbeelden hieronder, maar eerst moet u lezen over de basis. Kijk eens naar de Basislus. Het bestaat uit:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

een beetje opzij op do stuff: in dit voorbeeld is het gewoon een plaatshouder voor een bos van code die bepaalt hoe te formatteren en weer te geven elk bericht op een pagina. Deze code kan veranderen afhankelijk van hoe u wilt dat uw WordPress eruit te zien. Als je kijkt naar de Kubrick theme ‘ s index.php de do stuff sectie zou alles hieronder zijn:

<?php while ( have_posts() ) : the_post(); ?>

naar boven:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

een verklaring voor de programmeurs die er zijn:de have_posts() en de_post() zijn convenience wrappers rond het globale $wp_query object, dat is waar alle actie is. De $wp_query wordt genoemd in de blog header en fed query argumenten komen door middel van GET en PATH_INFO. De $wp_query neemt de argumenten en bouwt en voert een DB query uit die resulteert in een array van berichten. Deze array wordt opgeslagen in het object en ook terug naar de blog header waar het is gevuld in de Globale $ posts array (voor achterwaartse compatibiliteit met oude post loops).

zodra WordPress klaar is met het laden van de blog header en afdaalt in de template, komen we bij onze post Loop. De have_posts() roept gewoon $wp_query->have_posts () aan die een lus teller controleert om te zien of er nog posts over zijn in de post array. En the_post() roept $wp_query->the_post () aan die de lus teller vooruit helpt en de Globale $post variabele en alle globale post data instelt. Zodra we de lus hebben uitgeput, zal have_posts() false teruggeven en zijn we klaar.

Lusvoorbeelden

hieronder zijn drie voorbeelden van het gebruik van meerdere lussen. De sleutel tot het gebruik van meerdere loops is dat $wp_query slechts één keer kan worden aangeroepen. Om dit te omzeilen is het mogelijk om de query te hergebruiken door rewind_posts() aan te roepen of door een nieuw query object aan te maken. Dit wordt behandeld in Voorbeeld 1. In Voorbeeld 2 wordt het gebruik van een variabele om de resultaten van een query op te slaan behandeld. Tot slot,’ meerdere loops in actie ‘ brengt een heleboel ideeën samen om een manier van het gebruik van meerdere loops te documenteren om berichten van een bepaalde categorie op de homepage van uw blog te bevorderen.

meerdere lussen Voorbeeld 1

om dezelfde query een tweede keer door te lus, roept u rewind_posts () aan. Dit zal de lus teller resetten en kunt u een andere lus doen.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

Als u klaar bent met de posts in de oorspronkelijke query, en u wilt een andere query gebruiken, kunt u het $wp_query object hergebruiken door query_posts() aan te roepen en vervolgens terug te loopen. De query_posts () zal een nieuwe query uitvoeren, een nieuwe posts array bouwen en de lus teller resetten.

Als u de oorspronkelijke query wilt behouden, kunt u een nieuw query-object aanmaken.

meerdere lussen Voorbeeld 2

een andere versie van het gebruik van meerdere lussen neemt een andere tack voor het omzeilen van het onvermogen om have_posts() en the_post () te gebruiken. Om dit op te lossen, moet u de originele query in een variabele opslaan en deze vervolgens opnieuw toewijzen met de andere lus. Op deze manier kunt u gebruik maken van alle standaard functies die afhankelijk zijn van alle globals.

bijvoorbeeld:

opmerking: in PHP 5 wordt naar objecten verwezen met de “= clone” operator in plaats van “=” zoals in PHP 4. Om Voorbeeld 2 te laten werken in PHP 5 moet je de volgende code gebruiken:

dit tweede voorbeeld werkt echter niet in WordPress 2.1.

meerdere lussen in Actie

de beste manier om te begrijpen hoe meerdere lussen te gebruiken is door een voorbeeld van het gebruik ervan te tonen. Misschien wel het meest voorkomende gebruik van meerdere loops is om twee (of meer) lijsten van berichten op een pagina weer te geven. Dit wordt vaak gedaan wanneer een webmaster wil beschikken over niet alleen de nieuwste post geschreven, maar ook berichten uit een bepaalde categorie.

alle opmaak-en CSS-problemen terzijde gelaten, laten we aannemen dat we twee lijsten met berichten willen hebben. Een die zou een lijst van de meest recente berichten (de standaard 10 berichten meest recent toegevoegd), en een andere die zou bevatten slechts een post uit de categorie ‘featured’. Posten in de categorie ‘featured’ moeten eerst worden weergegeven, gevolgd door de tweede lijst van posten (de standaard). De vangst is dat er in beide categorieën geen post mag verschijnen.

Stap 1. Ontvang slechts één bericht uit de categorie’ featured’.

in het Engels zou de bovenstaande code als volgt luiden:

stel $my_query gelijk aan het resultaat van het opvragen van alle berichten met de naam featured en geef me trouwens maar één bericht. Stel ook de variabele $do_not_duplicate gelijk aan het ID-nummer van de enkele geretourneerde post. Bedenk dat de do stuff lijn vertegenwoordigt alle opmaakopties in verband met de post opgehaald.

merk op dat we de waarde van $do_not_duplicate in de volgende stap nodig hebben om ervoor te zorgen dat hetzelfde bericht niet in beide lijsten verschijnt.

Stap 2. De tweede lus, krijg de x Laatste berichten (behalve een).

de volgende code krijgt x recente berichten (zoals gedefinieerd in WordPress Voorkeuren) sla de reeds weergegeven uit de eerste lus en toont ze volgens do stuff.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

in het Engels zou de bovenstaande code als volgt luiden:

alle berichten ophalen, waar een bericht gelijk is aan $do_not_duplicate, dan gewoon niets doen( doorgaan), anders alle andere berichten weergeven volgens do stuff. Ook, update de cache, zodat de tagging en trefwoord plugins spelen leuk. Terugroepen, $ do_not_duplicate variabele bevat de ID van het bericht al weergegeven.

het eindresultaat

hier is hoe het laatste stukje code eruit ziet zonder enige opmaak:

het eindresultaat zou een pagina zijn met twee lijsten. De eerste lijst bevat slechts één bericht – het meest recente bericht uit de’ feature ‘ categorie. De tweede lijst bevat X recente berichten (zoals gedefinieerd in WordPress Voorkeuren) met uitzondering van de post die al in de eerste lijst. Dus, zodra de functie bericht is vervangen door een nieuwe, de vorige functie zal verschijnen in standaard post lijst hieronder (afhankelijk van hoeveel berichten u kiest om weer te geven en op de post frequentie). Deze techniek (of iets dergelijks) is door velen gebruikt in combinatie met kennis van de template hiërarchie om een andere look voor thuis te creëren.php en index.php. Zie bijbehorende bronnen onderaan deze pagina.

opmerking voor meerdere berichten in de eerste categorie

als posts_per_page = 2 of meer, moet u de code een beetje wijzigen. De variabele $do_not_duplicate moet veranderd worden in een array in tegenstelling tot een enkele waarde. Anders zal de eerste lus eindigen en de variabele $do_not_duplicate zal alleen gelijk zijn aan de id van het laatste bericht. Dit zal resulteren in dubbele berichten in de tweede lus. Om het probleem op te lossen vervang

door

merk op dat “posts_per_page” elk nummer kan zijn.Dit verandert $do_not_duplicate in een array. Vervang dan

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

door

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

waarbij u het patroon voortzet voor elke posts_per_page die gelijk is aan (2 in dit geval).

als alternatief kunt u de volledige $ do_not_duplicate array doorgeven aan $wp_query en alleen items die aan uw criteria voldoen worden geretourneerd:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

merk op dat in plaats van een string, de query parameter een associatieve array was die de post__not_in optie instelde.

geneste lussen

nesting-lussen betekent dat u een tweede lus draait voordat u de eerste hebt voltooid. Dit kan handig zijn om bijvoorbeeld een postlijst met een shortcode weer te geven.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

het is noodzakelijk om de belangrijkste lusgegevens na een geneste lus te resetten, zodat sommige globale variabelen weer de juiste waarden hebben.

bronnen

de sectie over meerdere loops is een combinatie van Ryan Boren en Alex King ‘ s discussie over de Loop op de Hackers mailinglijst. Het voorbeeld van geneste loops is geïnspireerd door een andere discussie op de mailinglijst en een bericht van Nicolas Kuttler.

Hulpmiddelen

  • WordPress WP_Query Generator
  • Krijgen In De Loop – (dia ‘s) een inleiding over de werking van plugins en thema’ s kunnen wijzigen in de Loop
  • WordPress Custom Loop
  • WordPress WP_Query Loop Generator

Related

om meer Te leren over de WordPress-Loop, en de verschillende template tags die alleen werken binnen de Lus, hier zijn meer bronnen:

Meer Over De Loop

  • Artikel: De Lus in Actie
  • Artikel: Template Tags
  • Artikel: Met behulp van de lus in Template bestanden

artikelen

  • artikel: de lus-een basisoverzicht van het gebruik van query binnen de WordPress lus.
  • artikel: Query overzicht-uitleg over hoe te bepalen welke query ‘ s WordPress genereren.
  • Article: customizing Queries via Hook
  • Article: Bekijk artikelen MySQL-query met aangepaste
  • Article: geavanceerde query ‘ s bouwen op taxonomieën
  • Article: custom query bouwen met Offset en paginering

Codedocumentatie

  • Class: WP_Query – Detailed Overview of class WP_Query
  • Class: WP_Comment_Query – Class for comment-related queries
  • Class: WP_User_Query – Class for user-related queries
  • Object: $wpdb – Overview on the use of the $wpdb object
  • Function: set_query_var()
  • Function: get_query_var()
  • Function: Query_posts() – create additional custom query
  • function: get_post() – take an ID of an item and return the records in the database for that article
  • function: get_posts() – Een speciale functie retourneert een array van items
  • Functie: get_pages() – Een speciale functie retourneert een matrix van pagina ‘ s
  • Functie: have_posts() – Een conditie die bepaalt of de query geretourneerd artikel
  • Functie: the_post (): wordt Gebruikt om automatisch de lus na een query
  • Functie: rewind_posts() – Hiermee wist u de huidige loop
  • Functie: setup_postdata() – hiermee Stelt u de gegevens voor een enkele query resultaat binnen een lus
  • Functie: wp_reset_postdata() – herstelt de vorige query (meestal na een lus binnen een andere lus)
  • Function: wp_reset_query()
  • Function: is_main_query() – zorgt ervoor dat de query die wordt gewijzigd alleen de hoofdquery
  • Action Hook: pre_get_posts – Change WordPress queries before they are executed
  • Action Hook: the_post – Modify the post object na query
  • filterhaak: Found_posts – wijzigt de waarde van het object found_posts WP_Query
dit artikel is gemarkeerd als aan te passen. Je kunt Codex helpen door het te bewerken.

You might also like

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.