Code voorbeeld

Snippet: Custom post types in archive.php van WordPress

Leestijd: 3 minuten (502 woorden)
profile image

Rick de Jong

Strategie

25 mei 2012 07:36

Je custom post weergeven in WordPress archieven

WordPress functies en mogelijkheden

Naarmate steeds meer mensen gebruik maken van WordPress, wordt het plugin aanbod aanzienlijk groter en reizen de functiemogelijkheden de pan uit. Dit is geen nadeel, maar kan soms problemen opleveren wanneer je nèt even opzoek bent naar die functie, die je helpt bij het goed gebruiken van WordPress als CMS. 

Tussendoor werkt veel met de mogelijkheid van Custom Post Types binnen WordPress. Dit houdt in dat je als gebruiker niet gebonden bent aan enkel berichten en pagina's, maar ook elementen als Boeken, Auto's, Producten etc op kunt zetten. Elk uiteraard keurig vermeldt onder hun eigen menu-knop en als eigen paginatype. De functies van zo'n paginatype zijn even uitgebreid als normale pagina's en berichten. Zo kan je onder andere categorieën en tags aanmaken en zijn moederpagina's in te stellen. Het enige nadeel is dat het soms lastig is om een overzicht te maken van deze aangemaakte pagina's.

Stel je voor

Een eenvoudig voorbeeld van het probleem waar je tegenaan kunt lopen is het volgende. Stel je wil een overzicht van de laatste tien auto's die je hebt toegevoegd in je WordPress beheer, net zoals dat kan van de laatste tien nieuwsberichten. Dan dien je hiervoor een aparte template aan te maken binnen WordPress, namelijk "archive-autos.php". 

Daarnaast dien je aan te geven dat het paginatype gebruik maakt van de archief functie (zie voorbeeld hieronder) van WordPress. En hier gaat het binnen WordPress nog juist wel eens mis. Je krijgt dan met geen mogelijkheid op een nette manier een overzicht van je laatst toegevoegde auto's te zien.

$args = array(
   'has_archive' => true, )
 );

Oplossing

Het oplossen van dit probleem kan erg simpel zijn, vooral als je niet veel opmaak verschil nodig bent binnen het overzicht van auto's, nieuws en andere type pagina's. Voer onderstaande code in in je "functions.php" en pas "jouw-custom-post-type" aan naar het type pagina dat je gebruikt. 

Wanneer je vervolgens je "functions.php" opslaat en naar het overzicht gaat van je pagina type zul je zien dat alles werkt. Je bent bij het gebruik van deze functie enkel een "index.php" of een "archive.php" nodig.

function tussendoor_custom_post_in_archive( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
$query->set( 'post_type', array(
'post', 'nav_menu_item', 'jouw-custom-post-type'
       ));
     return $query;
   }
}
add_filter( 'pre_get_posts', 'tussendoor_custom_post_in_archive' );

Let op: Het is belangrijk dat het gedeelte 'jouw-custom-post-type' wordt aangepast naar het juiste post-type dat je gebruikt voor een goede werking