WordPress: Aparte templates voor aparte pagina’s

WordPress: Aparte templates voor aparte pagina’s

Geschreven door Jasper Denker van de Cursus Website Maken
In dit deel van de serie waarin we een WordPress thema maken gaan we kijken naar de verschilende themabestanden voor verschillende soorten pagina’s van een website. Als je gebruik maakt van meerdere bestanden, kun je bijvoorbeeld een categorie pagina een ander uiterlijk geven dan een pagina waarop je een los artikel weergeeft.

Voordat we verschillende soorten pagina’s gaan bekijken kijken weer eerst hoe je bepaalde bestanden op meerdere manieren kunt gebruiken.

Page.php

Het normale bestand page.php wordt gebruikt om pagina’s van een website weer te geven. Naast het algemene bestand kun je ook gebruik maken van een bestand in de vorm page-id.php. Hierbij vervang je id door het id of de ‘slug’ van de pagina waar je het bestand voor wilt maken.

Het id van een pagina vind je door deze te bewerken in WordPress. In de URL van de WordPress-pagina wanneer je een pagina bewerkt vind je het id van de pagina. In onderstaand voorbeeld is het id van de pagina 1187.

post met id

De slug van een pagina vind je op dezelfde pagina, maar dan onder het vak waar je de titel invoert. De slug van de pagina in onderstaande afbeelding is ‘slug-van-de-pagina’.

slug

Je kunt deze allebei gebruiken om een themabestand te maken voor bovenstaande pagina. Je krijgt dan een van de volgende twee bestanden: ‘page-slug-van-de-pagina.php’ of ‘page-1187.php’. Als allebei de bestanden bestaan in het thema, gebruikt WordPress het bestand waarin de slug is verwerkt.

Je kunt ook een template maken welke je meerdere keren kunt gebruiken. Wanneer je bijvoorbeeld een pagina op volle breedte wilt weergeven, kun je hier het bestand volledige-breedte.php voor aanmaken. De naam die je hiervoor gebruikt, maakt niet uit. Het gaat om een klein stukje code wat je in het bestand plaatst:

<?php
/*
Template Name: Volledige breedte
*/
?>

Wanneer je dit bestand in het thema opslaat, zul je zien dat er een nieuw onderdeel verschijnt in het venster Page Attributes.

pagina atributen

Je kunt hier onder het kopje Template aangeven met welke opmaak je de pagina wilt weergeven. Wanneer ‘Volledige breedte’ wordt gebruikt zal dus het themabestand volledige-breedte.php gebruikt worden. De andere optie, ‘Default Template’, staat voor het gebruik van page.php.

Het bestand volledige-breedte.php zou er als volgt uit kunnen zien:

<?php
/*
Template Name: Volledige breedte
*/
?>

<?php get_header(); ?>

		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
		<div id="entry" class="full">
			<h1><?php the_title(); ?></h1>
			<?php the_content(); ?>
		</div>
		<?php endwhile; endif ?>

<?php get_footer(); ?>

Let op! <?php get_sidebar(); ?> is weggehaald en de klasse ‘full’ is toegevoegd aan de div met id ‘entry’. Daarnaast moet het volgende stukje code aan het stijlblad toegevoegd worden:

#entry.full {
	float: left;
	width: 960px;
}

Single.php

Het bestand single.php wordt gebruikt om een bericht of artikel weer te geven. Naast het gewone ‘single.php’ kun je varianten hiervan gebruiken. Wanneer je bijvoorbeeld ‘Custom Post Types’ gebruikt kan je gebruik maken van het bestand ‘posttype-single.php’. Waarbij je posttype door het type vervangt. Het bestand books-single.php zal bijvoorbeeld de Custom Post Types van het type books weergeven.

Author.php, tag.php en category.php

Author.php, tag.php en category.php zijn themabestanden die berichten weergeven die bepaalde eigenschappen hebben. Deze laten respectievelijk de berichten met dezelfde auteur, tag of categorie zien.

We beginnen met te kijken naar author.php. Dit bestand zou er als volgt uit kunnen zien:

<?php get_header(); ?>

		<div id="entry">
		<?php the_post(); ?>
		<h1>Alle artikelen van <?php echo $authordata->display_name; ?></h1>
		<?php rewind_posts(); ?>

		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<div class="post">
				<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
				<?php the_excerpt(); ?>
			</div>
		<?php endwhile; endif ?>
		</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

In de titel wordt de naam van de auteur weergeven. Er wordt hier gebruik gemaakt van een klein trucje; de functie the_post(). Hierdoor wordt ‘The Loop’ al uitgevoerd en krijgt de variabele $authordata zijn waarde. Vervolgens wordt de functie rewind_posts() gebruikt om de berichten weer klaar te zetten voor de echte ‘Loop’.

Het andere verschil is het gebruik van the_excerpt() in plaats van the_content(). The_excerpt() geeft in plaats van het volledige bericht, een kleine samenvatting. Zo kan de gebruiker makkelijker een goed bericht vinden.

Om author.php makkelijk te kunnen testen, vervangen we de regel in single.php waar de auteur wordt weergegeven door het volgende:

<p><strong>Auteur:</strong> <a href="<?php echo get_author_link( false, $authordata->ID, $authordata->user_nicename ); ?>"><?php the_author(); ?></a></p>

Deze regel geeft een link naar de auteur weer, zodat deze makkelijk te bereiken is.

We gaan nu kijken naar category.php, welke er vergelijkbaar uitziet:

<?php get_header(); ?>

		<div id="entry">
		<h1>Artikelen in de categorie <?php single_cat_title(); ?></h1>

		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<div class="post">
				<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
				<?php the_excerpt(); ?>
			</div>
		<?php endwhile; endif ?>
		</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Het ‘trucje’ met de functies the_post() en rewind_posts() hoeft nu niet gebruikt te worden. De functie single_cat_title() kan gebruikt worden om de categorienaam weer te geven. Het verschil met tag.php is ook niet groot. Daar gebruik je de functie single_tag_title(), met het volgende resultaat:

<?php get_header(); ?>

		<div id="entry">
		<h1>Artikelen getagd met '<?php single_tag_title(); ?>'</h1>

		<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
			<div class="post">
				<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
				<?php the_excerpt(); ?>
			</div>
		<?php endwhile; endif ?>
		</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Net zoals voor page.php, kun je ook van author.php, tag.php en category.php varianten gebruiken. Dit gaat ook op dezelfde manier. Gebruik de volgende formaten:

author-slug/id.php
tag-slug/id.php
category-slug/id.php

Waarbij je slug/id vervangt door de slug of id van de auteur, tag of categorie.

404.php

Wanneer een pagina niet wordt gevonden, gebruikt WordPress het bestand 404.php. In dit bestand kun je de gebruiker een melding geven dat de pagina niet kon worden gevonden. Doe dit bijvoorbeeld zo:

<?php get_header(); ?>

		<div id="entry">
			<h1>Oeps! De huidige pagina kon niet worden gevonden...</h1>
			<p>Excuses voor het ongemak.</p>
		</div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

We hebben nu de meest gebruike themabestanden bekeken. Als je alles een keertje live wilt zien, kun je hier weer het voorbeeld downloaden: voorbeeldthema-4.zip.

In het volgende deel uit deze serie gaan we kijken naar weergeven van reacties in het thema.

Wat zou jij in je thema willen zien?

Als je bezig bent met deze serie en een vraag hebt over een bepaalde functionaliteit van een thema, stel deze dan! Laat een berichtje achter en misschien kan ik daar op inspelen in deze reeks van artikelen.

Les 1Les 2Les 3Les 4

          Leuk als je dit artikel deelt:
Share

Eén gedachte over “WordPress: Aparte templates voor aparte pagina’s

  1. Hallo Jasper,

    Als eerste even vermelden dat je artikelen mooi en vooral duidelijk zijn opgesteld !

    Maar ik mis iets, wat toch wel handig is om ook te vermelden dacht ik zo, zowel in pages als in single.

    Ik spreek dan over: edit_post_link

    Grtz Rene

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *