Nu dat we bijna alles hebben geleerd over de WP_Query
klas, het is tijd om een paar voorbeelden uit te proberen. In dit deel gaan we aan de slag met 10 verschillende scenario's om de WP_Query
klasse en gerelateerde functies.
Het zal een leuke oefening zijn en ik hoop dat het even leerzaam zal zijn. Laten we beginnen!
Alleen al om dit artikel afzonderlijk van de serie "Mastering WP_Query" begrijpelijk te maken, zou ik een nano-tutorial moeten maken over het maken van WordPress-loops met de WP_Query
klasse.
Het is niet anders dan een normale lus maken. Een typische WordPress-lus gaat als volgt:
En een lus maken met de WP_Query
klas heeft maar enkele verschillen:
'nieuws', 'posts_per_page' => 3); $ my_query = new WP_Query ($ args); if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Berichtgegevens komen hier. // Reset de '$ post'-gegevens naar het huidige bericht in de hoofdquery. wp_reset_postdata (); ?>
Laten we het verschil tussen de twee zien:
WP_Query
aanleg,WP_Query
klasse,$ My_query->
naar het begin van de have_posts ()
en de post()
functies (dus ze zijn nu de methoden van de WP_Query
klasse),$ bericht
dus het kan terugkeren naar de hoofdvraag.Nu weten we hoe we een lus kunnen maken met WP_Query
en het verschil tussen een normale lus en een lus gemaakt met WP_Query
. We gaan geen lussen maken in elk voorbeeld (om de tutorial kort te houden en over het onderwerp), dus je kunt dit gedeelte raadplegen als je een lus wilt maken met de onderstaande voorbeelden.
Laten we zeggen dat u de berichten van een specifieke auteur die in het lopende jaar zijn geschreven wilt vermelden in een speciale sectie 'Dit artikel van de auteur dit jaar'. Een eenvoudige combinatie van twee WP_Query
parameters zullen volstaan:
'john', // Ontvang zijn berichten van dit jaar. 'jaar' => $ huidig jaar); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Geef deze query een lus en je bent klaar om te gaan!
Stel dat u een lus wilt maken onder elk bericht op hun enkele berichtpagina's en een lijst wilt weergeven van de laatste berichten uit de categorie waarin het bericht zich bevindt. Uiteraard moet u het huidige bericht uitsluiten voor het geval dit een van de nieuwste berichten zou zijn. berichten uit die categorie. Hier ziet u hoe u de query maakt met de 'kat'
en 'Post__not_in'
parameters:
term_id; // Setup-argumenten. $ args = array (// Get category's posts. 'cat' => $ current_post_first_cat_id, // Huidige post uitsluiten. 'post__not_in' => array ($ current_post_id)); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Voor de lus, stel ik voor het creëren van drie of vier kolommen met postminiatuurlijsten boven berichttitels. Het ziet er echt leuk uit direct onder het bericht en vóór het gedeelte met reacties.
WordPress beschikt niet over een ingebouwd systeem voor het tellen van berichten, en plug-ins die deze functionaliteit bieden staan bekend om het vertragen van de website (omdat in elk bericht de plug-ins steeds opnieuw in de database schrijven om de weergave te registreren tellingen). Er is echter nog een andere manier om te bepalen welke berichten het meest 'populair' zijn: opmerkingen tellen. En in tegenstelling tot weergavetellingen, zijn de commentaartellingen al in de database aanwezig: de WP_Query
klasse maakt het super eenvoudig om berichten te sorteren op aantal reacties:
'comment_count'); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Zie je hoe gemakkelijk dit is? Stelt u zich nu voor een aangepaste paginasjabloon te maken met een lus die deze query uitvoert - een pagina met de "Meest gereageerd bericht".
Wanneer WordPress wordt gebruikt voor het bouwen van bedrijfswebsites, portfolios of webmagazines, zijn schuifregelaars een "must-have" industriële standaard geworden. Ik ben niet echt een fan van sliders (ik vind het slechte UX), maar het web lijkt het leuk te vinden, dus ik kan niet gewoon nee zeggen tegen mijn klanten tijdens het maken van websites voor hen. Als ze schuifregelaars willen, gebruik ik een eenvoudige query met behulp van de WP_Query
klasse:
'slider', // Krijg een specifieke schuifregelaarcategorie. 'category_name' => 'home-slides', // Verkrijg alle dia's en niet pagineren. 'nopaging' => waar); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
De 'kat'
argument kan worden gebruikt om dia's uit verschillende categorieën op te halen, zodat u diagroepen kunt scheiden en meerdere schuifregelaars op meerdere pagina's kunt gebruiken. Als u slechts één schuifregelaar op uw website wilt gebruiken, kunt u die regel verwijderen en kunt u verder gaan.
Als je een liefhebber bent van literatuur of religieus, zou je misschien enkele van je favoriete citaten in de zijbalk willen hebben - het is geen verspilling van ruimte als je het gebied doelgericht gebruikt. Als u dus een willekeurige quote in uw zijbalk op elke paginaweergave wilt opnemen, kunt u het volgende codefragment gebruiken om het berichttype te maken en de volgende query gebruiken om een lus in uw zijbalk te maken:
'Quotes', 'public' => true); register_post_type ('quotes', $ args); add_action ('init', 'quote_post_type'); // Setup-argumenten. $ args = array (// Haal het "quotes" type psot. 'post_type' => 'quotes', // Randomize the order. 'orderby' => 'rand', // Krijg maar één item. 'posts_per_page' = > 1,); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Een gemakkelijke en elegante oplossing.
Ik vond dit voorbeeld op Scribu.net en ik moet zeggen dat het misschien de beste is WP_Query
truc in deze tutorial. Het is een beetje meer technisch dan de anderen, omdat het in deze context kan worden toegepast op een door WordPress aangedreven e-commerce website.
Dit is het codefragment dat u wilt gebruiken als u items van een aangepast 'Product'-berichttype wilt weergeven en de resultaten wilt filteren met de aangepaste velden' prijs ':
'product', // Stel de "metaquery" in. 'meta_query' => array (array (// Haal het aangepaste veld 'price'. 'key' => 'price', // Stel de prijswaarden in. 'value' => array (100, 200), // Set de operator vergelijken. 'vergelijken' => 'TUSSEN', // Alleen numerieke velden weergeven. 'type' => 'numeriek',))); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Een grote pluim voor Silviu-Cristian Burca!
Hier is een leuke oefening - en we kunnen de Shortcode API ook gebruiken! In dit voorbeeld gaan we een shortcode maken waarmee een bericht in een bericht kan worden ingesloten. (Ik hield mezelf nauwelijks tegen om de shortcode te noemen [Postception]
.) In het volgende codefragment maken we een shortcode-functie waarmee we berichten (of elk aangepast berichttype) kunnen insluiten en kunnen we kiezen of we het volledige bericht willen weergeven of alleen maar een uittreksel:
'post', 'slug' => ", 'full' => true), $ attributes)); // Setup-argumenten. $ args = array (// Get post type (" post "standaard). 'post_type' => $ type, // Plaats een bericht op slug. 'name' => $ slug); // Instantiate new query instance. $ my_query = new WP_Query ($ args); // Controleer of we queryresultaten hebben. if ($ my_query-> have_posts ()) // Begin met het genereren van markup. $ output = ''; // Start een lus over de queryresultaten. while ($ my_query-> have_posts ()) $ mijn_query-> the_post (); // Titel toevoegen aan uitvoer. $ output. = ' '; else // Uitvoerbericht om gebruiker te laten weten dat er geen berichten zijn gevonden. $ output = ''; $ output. = get_the_title (); $ output. = '
'; // Krijg volledige post als '$ full' waar is, anders toon het get-fragment als ('true' === $ full) // Volledige inhoud aan output toevoegen. $ output. = ''; $ output. = get_the_content (); $ output. = ''; else // Uittreksel toevoegen aan uitvoer. $ output. = ''; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Zie volledige post', 'tutsplus'). '»'; $ output. = ''; // Genereren van markup beëindigen. $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>'. __ ('Geen berichten gevonden', 'tutsplus'). '
'; $ output. = '
Hier is een idee: waarom toon je sommige "sneak peeks" van je aankomende berichten niet aan je bezoekers? U kunt de volgende functie gebruiken om uw geplande berichten met of zonder fragmenten na de titels weer te geven:
* * Gebruik zonder Fragmenten: * * * / function tutsplus_show_drafts ($ show_excerpts = true) // Setup-argumenten. $ args = array ('post_status' => 'toekomst', 'nopaging' => waar); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); // Controleer of we queryresultaten hebben. if ($ my_query-> have_posts ()) // Begin met het genereren van markeringen. $ output = ''; // Start een lus over de queryresultaten. while ($ my_query-> have_posts ()) $ mijn_query-> the_post (); // Uitgevoerde conceptnaam en uittreksel (indien ingeschakeld). $ output. = ' '; else // Laat gebruiker weten dat er niets is gevonden. $ output = ''; $ output. = ''; // Genereren van markup beëindigen. $ output. = ''. get_the_title (). '
'; $ output. = get_the_title (); $ output. = ''; if ($ show_excerpts) $ output. = ''; $ output. = get_the_excerpt (); $ output. = ''; $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; ?>'. __ ('Niets gevonden', 'tutsplus'). '
'; $ output. = '
Als uw blog ouder is dan een jaar, en uw inhoud is tijdloos (wat betekent dat zowel een persoon vanaf 2015 als in 2025 het artikel relevant vindt), kan het toevoegen van een "Plaats van een jaar geleden" sectie uw pageviews mogelijk een boost geven. Hier is hoe je het doet:
datum ('j'), // maand (1 - 12). 'maandnum' => datum ('n'), // Jaar (min 1). 'jaar' => datum ('Y') - 1, // Toon slechts één bericht. 'posts_per_page' => 1); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Gebruik deze query om een lus te maken waarin een bericht van weleer wordt weergegeven.
U hebt niets anders dan de titels van de subpagina's om in uw pagina's "Services", "Ons werk" of "Mijn portfolio" te plaatsen? Misschien een intro-paragraaf, maar je hebt gelijk, die pagina's zijn gedoemd 'plaatshouders' te zijn. Toch is het een goed idee om daar subpagina's te plaatsen - misschien een raster met vierkante miniaturen en onderstaande titels. Laten we eens kijken welke query we moeten gebruiken bij het maken van zo'n paginasjabloon:
$ current_page_id, // Schakel paginering uit. 'nopaging' => waar); // Instantiëren nieuwe query-instantie. $ my_query = new WP_Query ($ args); ?>
Ik hoop dat je net zoveel van deze voorbeelden hebt genoten als ik tijdens de voorbereiding. Ik heb speciale aandacht besteed aan het geven van verschillende voorbeelden om zowel leuk te zijn als creatief te zijn.
Als je aan betere voorbeelden hebt gedacht tijdens het lezen van deze vragen, of vragen hebt, aarzel dan niet om hieronder een opmerking te schieten. En als je het artikel leuk vond, vergeet dan niet om het met je vrienden te delen!
In het volgende deel zullen we het hebben over WP_User_Query
, een van de zuster klassen van WP_Query
. Zie je dan!