Wer so wie ich mal viel Zeit mit dem Weaver Theme (Weaver II oder aktueller: Weaver Xtreme) verbracht hat, weiß sicherlich die bei ihm so einfach zu realisierende Möglichkeit der WordPress Seite mit Beiträgen einer Kategorie (oder auch mit zwei oder drei Kategorien) zu schätzen. Weaver bringt hierfür ein sogenanntes Seiten-Template (eine Formatvorlage) mit. Die bietet dann per formularartiger Abfrage die Auswahl, welche Beiträge auf dieser Seite erscheinen sollen. Andere Themes bieten eine solche Funktionalität nicht. Doch lässt sie sich erstellen, sei es nun via Plugin oder selbst geschrieben.
Wozu eine Seite mit Beiträgen einer Kategorie erstellen?
Stellen Sie sich vor, Sie haben zwei verschiedene Produktarten im Angebot: Bücher und Filme. Obst und Gemüse. Damen- und Herrenmode. Für die einzelnen Produkte erstellen Sie Beiträge, die Sie entsprechend kategorisieren. Statt im Menü nun aber die Kategorien buecher und filme (oder obst und gemuese …) abzurufen, verweisen die Einträge auf zwei Seiten, die Sie hierfür angelegt haben. Im Gegensatz zu Kategorie-Seiten können diese Seiten ein wenig Einleitungstext zeigen, vielleicht mit passendem Foto, bevor darunter automatisch alle Beiträge der passenden Kategorie erscheinen. Gerade für jemanden, der nicht regelmäßig bloggen möchte, den Funktionsvorteil von Beiträgen aber nicht missen möchte, ist dies ein sehr interessantes Vorgehen.
Die Plugin-Lösung: Posts in Page
Das WordPress Plugin Posts in Page von IvyCat Web Services stellt eine recht einfach Lösung dar: Nach der Installation stellt das Plugin einen Shortcode zur Verfügung, den Sie an gewünschter Stelle in Ihre Seite kopieren. Unter Einstellungen > Posts in Page finden Sie eine Bedienungsanleitung für diesen Shortcode.
Der Shortcode an sich [ic_add_posts] macht nichts anderes, als alle Beiträge abzurufen. Möchten Sie eine Auswahl, also zum Beispiel eine konkrete Kategorie, braucht es eine weitere Angaben innerhalb des Shortcodes: [ic_add_posts category=’Kategoriename‘]. Weitere Definitionen sind die Anzahl der Beiträge (showpost=’5′) oder die Art der Sortierung, sofern sie nicht dem Standard chronologisch, aktuellster zuerst folgen soll (orderby=’title‘ order=’ASC‘).
Machbar ist damit eine ganze Menge: Stellen Sie sich die Bücher-Seite vor, die nach einem Einleitungstext unter drei entsprechenden Überschriften Ihre drei aktuellsten Rezensionen zu Liebesromanen, Horror- und Kinderbüchern anzeigt. Mit dem Plugin Posts in Page ist das unproblematisch möglich:
<p>Willkommen in meiner Bücherecke! Hier finden Sie meine aktuellsten Buchbesprechungen. Schauen Sie selbst:</p>
<h3>Liebesromane</h3>
[ic_add_posts category='liebe' showpost='3']
<h3>Horror: Vampire und Zombies</h3>
[ic_add_posts category='horror' showpost='3']
<h3>Kinderbücher</h3>
[ic_add_posts category='kinder' showpost='3']
Bei diesem Vorgehen sorgt das Plugin dafür, dass immer die aktuellsten drei Beiträge auf dieser Seite erscheinen. Veröffentlichen Sie eine neuen Beitrage zu den Liebesromanen, fällt der letzte in der Liste weg.
Das Problem: die fehlende Paginierung
Unabhängig davon, ob Sie nun in dem Shortcode eine Anzahl an Beiträgen definieren oder dies dem WordPress Standard (10 Beiträge pro Seite) überlassen: Das Plugin löst keine Paginierung aus.
Nehmen wir eine Seite Filme. Auch hier gibt ein paar freundliche Worte vorweg, dann folgen Ihre Filmbesprechungen. In dem Moment, da Sie Ihre elfte Filmbesprechung veröffentlichen, sollte WordPress eine weitere Seite anlegen, auf der die älteste Ihrer Filmbesprechungen erscheint. Und genau das leistet das Plugin leider nicht.
Wenn die Paginierung wichtig ist, bleibt nichts anderes übrig, als selbst Hand anzulegen. Aber Achtung: Dieses Vorgehen ist definitiv für Fortgeschrittene gedacht – und benötigt ein Child Theme!
Eine WordPress Seite mit Beiträgen einer Kategorie selbst schreiben – am Beispiel des Themes Twenty Sixteen
Dieses Vorgehen macht es nötig, sich einmal mehr mit PHP zu beschäftigen. Kurz: Für die Darstellung einer WordPress Seite ist die Datei page.php verantwortlich. In ihr steht alles, was das Theme braucht, um zu wissen, welches Element es an welcher Stelle ausgegeben soll. Für uns nun stellt die page.php die Grundlage dar für die zu erstellende neue PHP-Datei, die Sie zukünftig als Vorlage (Template) nutzen.
Eine neue Vorlage erstellen
Hierfür brauchen Sie Zugriff auf Ihren Webspace. Dieser erfolgt über ein FTP-Programm wie Filezilla oder Cyberduck. Haben Sie sich mit Ihren FTP-Zugangsdaten auf Ihrem Webspace angemeldet, navigieren Sie dort im Verzeichnis wp-content zu dem Ordner themes. Dort finden Sie einen Ordner mit dem Namen Ihres Themes. In diesem Ordner befinden sich eine Reihe von PHP-Dateien, so auch die page.php und die archive.php. Laden Sie beide Dateien in ein Verzeichnis Ihrer Wahl auf Ihre Festplatte herunter.
Nun öffnen Sie die page.php mit einem Texteditor, zum Beispiel Notepad++, es kann aber auch zum Beispiel der Editor Ihres Windows-Systems sein.
Die Datei beginnt mit öffnenden PHP-tag. Danach folgen Angaben, die innerhalb von Schrägstrichen stehen. Diese Angaben ersetzen wie folgt:
<?php
/**
* Template Name: NAME IHRES SEITENTEMPLATES
*
*
* @package Twenty Sixteen
*/
In der page.php steht eine ganze Menge, ein wild anmutende Mischung aus PHP- und HTML-tags.Wir haben uns aber hier schon einmal mit dem Loop beschäftigt. Den finden Sie auch in der page.php.
Wir wollen an das Ende des Loops und werden zwischen seinem Ende und dem abschließenden main-tag die wesentlichen Änderungen vornehmen:
// End of the loop.
endwhile;
?>
HIER ERFOLGEN DIE ÄNDERUNGEN
</main><!-- .site-main -->
<?php get_sidebar( 'content-bottom' ); ?>
</div><!-- .content-area -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Einen zweiten Loop eröffnen
Nun eröffnen Sie einen zweiten Loop. Hierfür bedienen wir uns an der archive.php. Was wir brauchen, ist wiederum der Loop, nun aber den der archive.php, sowie die Pagination (previous/next page navigation), die Twenty Sixteen hier in seiner archive.php mit aufführt. Die exakte Auswahl des Codes aus der archive.php, die wir brauchen, habe ich hier aufgeführt.
<?php
// Start the Loop.
while ( have_posts() ) : the_post();
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'template-parts/content', get_post_format() );
// End the loop.
endwhile;
// Previous/next page navigation.
the_posts_pagination( array(
'prev_text' => __( 'Previous page', 'twentysixteen' ),
'next_text' => __( 'Next page', 'twentysixteen' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
) );
?>
Kopieren Sie alles und fügen Sie es in Ihr Seitentemplate ein, und zwar zwischen dem Ende des ersten Loops und dem abschließenden main-tag .
Die Kategorie und die Anzahl der Beiträge pro WordPress Seite definieren
Zwischen den beiden Loops definieren Sie nun, welche Beiträge Sie anzeigen wollen. Im Moment würde Ihr Template alle Beiträge anzeigen. Wir aber wollen ja nur eine Kategorie, und das braucht eine Definition:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'category_name' => 'fussball',
'paged' => $paged,
'posts_per_page' => 2
);
query_posts($args); ?>
In diesem Beispiel heißt die Kategorie fussball und ich möchte tatsächlich nur 2 Beiträge pro Seite zeigen. Sie können natürlich eine ganz andere Kategorie wählen und sich für 20 Beiträge pro Seite entscheiden. Auch können Sie mehr als eine Kategorie anzeigen lassen: Mehrere Kategorien trennen Sie innerhalb der einfachen Anführungszeichen mit Kommata.
Speichern Sie Ihr Seitentemplate unter einem neuen Namen (zum Beispiel: testtemplate.php) und laden Sie es nun mit Ihrem FTP-Programm in denselben Theme-Ordner, in dem sich die page.php und die archive.php befinden.
Das Seitentemplate einer Seite zuordnen
Ab jetzt arbeiten Sie wieder im Backend Ihrer WordPress Installation. Öffnen Sie die Seite, der Sie Ihr neues Seitentemplate zuordnen wollen – oder falls es die Seite noch gar nicht gibt, erstellen eine neue. In der Bearbeitung finden Sie (nun) in der Box Attribute unter Eltern den Eintrag Template. Die Auswahl zeigt standardgemäß das Standardtemplate. Wählen Sie dort Ihr Template aus. Falls Sie es dort (noch) nicht sehen, aktualisieren Sie die Seite. Falls Sie es dann immer noch nicht sehen, haben Sie etwas falsch gemacht.
Nach der Auswahl Ihres Seitentemplates speichern Sie Ihre Seite und schauen sich die Vorschau an. Wenn sie ungefähr so aussieht, haben Sie alles richtig gemacht:
Das Template können Sie übrigens fortan auch im Backend Ihrer Installation bearbeiten. Wählen Sie hierfür Design > Editor. In der Liste der dort zur Verfügung stehenden Dateien erscheint nun auch Ihr Seitentemplate.
Wer hat’s erfunden?
Ich habe diese kleine Anzahl an Beiträgen pro Seite gewählt, um einen Effekt zu verdeutlichen: Mit dieser PHP-Definition, die Kategorie und Beitragsanzahl abfragt, ist die Paginierung möglich. Ich selbst habe lange nach der passenden Lösung gesucht, und ich werde jetzt nicht behaupten, ich hätte sie mir auf Basis meiner unglaublichen PHP-Kenntnisse erarbeitet. Vielmehr habe ich diese Lösung im Support von wordpress.org gefunden https://wordpress.org/support/topic/pagination-on-custom-page-template und sie im Rahmen meines Testblogs und des dort installierten Twenty Sixteen Themes getestet.
Während mein Dank also an @bobbyadamson on WordPress.org geht, kann ich wirklich nur jedem empfehlen: Im Zweifel die Community befragen, die weiß eigentlich immer Rat!
Beitragsbild: Britta Kretschmer
Schreibe einen Kommentar