Pagination in WordPress
Hier findet ihr das Code-Snippet um eine Pagination in WordPress hinzuzufügen und Personen so die Navigation über mehrere Seiten zu erleichtern.
In den Einstellungen von WordPress kann festgelegt werden, wie viele Beiträge auf einer Seite angezeigt werden sollen. Häufig sind es ca. zehn Artikel. Wenn diese Zahl erreicht ist, blendet das WordPress-Theme eine Seitennavigation („Nächste Seite“ / „Vorherige Seite“) ein, damit der Besucher auch ältere Beiträge erreichen kann. Leider kann über diese Links keine Seite übersprungen werden. Auch ist dem Besucher oft unklar, auf welcher Seite er sich befindet. Mit einer Pagination ersetzt ihr die Standard-Seitennavigation durch eine benutzerfreundlichere Version.
functions.php – Template für Pagination definieren
Öffnet die functions.php
des Themes und fügt folgenden Code ein. Mit diesem Snippet wird das Template der Pagination definiert – ein <nav>
-Element mit ungeordneter Liste:
/* pagination */
function pagination($pages = '', $range = 4)
{
$showitems = ($range * 2)+1;
global $paged;
if(empty($paged)) $paged = 1;
if($pages == '')
{
global $wp_query;
$pages = $wp_query->max_num_pages;
if(!$pages)
{ $pages = 1; }
}
if(1 != $pages)
{
echo "<nav class=\"pagination\"><ul>";
if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link(1)."'>«</a></li>";
if($paged > 1 && $showitems < $pages) echo "<li><a href='".get_pagenum_link($paged - 1)."'>‹</a></li>";
for ($i=1; $i <= $pages; $i++)
{
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
{
echo ($paged == $i)? "<li><span class=\"current\">".$i."</span></li>":"<li><a href='".get_pagenum_link($i)."' class=\"inactive \">".$i."</a></li>";
}
}
if ($paged < $pages && $showitems < $pages) echo "<li><a href=\"".get_pagenum_link($paged + 1)."\">›</a></li>";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<li><a href='".get_pagenum_link($pages)."'>»</a></li>";
echo "</ul></nav>\n";
}
}
Pagination im WordPress-Theme aufrufen
Öffnet nun das Template in dem die Pagination eingebunden werden soll. Das ist häufig die index.php
, die tag.php
, die category.php
oder die archive.php
. Fügt folgenden Code dort ein, wo die Pagination erscheinen soll und ersetzt[EUER INDIVIDUELLER LOOP]
mit der Variablen die ihr für WP-Query o.ä. vergeben habt.
Auch eine Einbindung außerhalb des Loops ist möglich.
<?php if (function_exists("pagination")) {pagination([EUER INDIVIDUELLER LOOP]->max_num_pages); } ?>
Individueller Loop mit Pagination
Wenn ihr einen angepassten Loop oder einen Custom Post Type von WordPress mit einer Pagination ausstatten wollt, verwendet am besten einen WP_Query(). Wir haben in einem separaten Beitrag beschrieben, wie der WP_Query so angepasst wird, dass er zu einer Pagination kompatibel ist. WP_Query() mit Pagination.
Hi,
ich stehe gerade total auf dem Schlauch, was ich anstelle von [EUER INDIVIDUELLER LOOP] eingeben muss…
Kann mir das jemand nochmal erklären bzw. ein Beispiel geben?
Vielen Dank
Du kannst den Loop über eine Variable aufrufen – z.B. wenn du einen WP_Query zum Erzeugen des Loop verwendet hast. Diese Variable muss dort eingetragen werden. Siehe auch unseren Beitrag zur Pagination in WP_Query.
Achtung: Wenn man eine Blätterfunktion mit einem Custom Post Type realisieren will und der Post Type den gleichen Namen hat, wie die Seite auf der man die Pagination einbauen möchte, dann führt das zu einem Fehler! Mit Hilfe von folgendem Code in der functions.php konnte ich das Problem dann gottseidank noch lösen („news“ muss natürlich mit dem Namen eures Post Types ausgetauscht werden): add_rewrite_rule(‚^news/page/([0-9]+)‘,’index.php?pagename=news&paged=$matches[1]‘, ‚top‘);
Hallo Sandra, vielen Dank für die Ergänzung. Unsere folgenden Beiträge behandeln etwas umfangreichere und komplexere Möglichkeiten von Paginierung/Nachladen in WordPress:
… gesucht, gefunden – funktioniert :)
DANKE
hallo jonas,
ich arbeite mich gerade durch deinen CD-Workshop „WP Themes entwickeln“ (gut gemacht ;-) …) und wollte diese pagination in mein – auf dieser wissensgrundlage – neues basistheme einbauen. aber es funktioniert nicht (und im original „programmkino“-theme auch nicht.) nav wird nicht generiert – öde leere im quellcode. in meinen alten theme-vorlagen hingegegen läuft es. an was kann das liegen?
liebe grüße, tanja
[…] Auf der Seite von Kulturbanause.de habe ich dazu einen PHP-Code gefunden. kulturbanause.de […]
[…] externe Seite. Die beste Version, die ich finden konnte ist unter folgender Adresse zu erreichen: https://blog.kulturbanause.de/2012/10/pagination-in-wordpress (01.08.2014 – 17:29 […]
Ich hab mal eine Frage… und zwar, kann man auch ein Pagination auch in der page.php einbauen? Oder Muss ich das über Category machen?
Lg Kathrin
Toller Beitrag! Mal ne richtig doofe Frage, aber wie verhindere ich mit einer intelligent (also nicht manuell) Lösung, das Page 2, 3, (…), indexiert werden?
Ich habe bei bestimmten taxonomie cats bis zu 10 Seiten, möchte aber das Google immer Seite 1 indexiert und den Rest nur liest.
Vielen Dank
Vielen Dank – code funktioniert bestens. Auf jeden Fall benutzerfreundlicher als die Standard-Einstellung.
Wie immer tolle Sache :)
copy pass // stylen // läuft *i like*
Wo bleibt die DVD mit best of WP ;) Mein Kaufsegen hast du :)
Hey wenn ich das einbinde komme ich nur auf die 404.php
alle Links laufen auf folgende referenz:
/page/2
wo ist der Fehler ?
Prüfe bitte mal deine Permalink-Struktur (Einstellungen → Permalinks). Hast du dort Standard gewählt? Wenn ja, ändere die Struktur mal in sprechende URLs ab.
Das ist der Fall:
Die Referenz zielt auf: http://www.xxx.xx/category/news/page/2
Das ist wirklich mal hilfreich. Viele WordPressblogs haben zwar inzwischen ein tolles Design, aber die Pagination vom Basictheme. Wertet einen Blog auf!!
Danke für den Tipp mit der schlanken functions.php Lösung. Ich nutze derzeit auf meinem Blog ein Plugin. Wobei ich ein paar Codezeilen direkt im Theme immer bevorzuge. Mal schauen, vielleicht baue ich um.
Das ist exakt die Pagination die auch hier im Blog verwendet wird.