Pagination in WordPress-Theme einbauen

veröffentlicht am 31. Dezember 2009

Sobald man viele Artikel erstellt hat, sind die einfachen Links auf die vorherige oder nächste Seite meiner Meinung nach nicht mehr ausreichend. Aufgrund dessen habe ich mir ein paar Pagination-Plugins angeschaut, war aber mit keinem so recht zufrieden. Deshalb habe ich mir nun eine eigene einfache und schnelle Pagination geschrieben.

Hier kannst du ein Paket aus der PHP-Datei und dem zugehörigen Stylesheet herunterladen. Den Quellcode musst du einfach in deine functions.php kopieren oder anderweitig in dein WordPress-Theme einbinden.

Um die Pagination nutzen zu können, musst du folgenden Code an die passende Stelle deines Themes einfügen:

<?php if(function_exists('pagination')) pagination(); ?>

Die Funktion kann auch parametriert aufgerufen werden:

<?php if(function_exists('pagination')) pagination($start_end_links, $middle_links); ?>

Der erste Parameter gibt dabei an, wieviele Links immer am Anfang und am Ende der Pagination angezeigt werden sollen. Der zweite Parameter bestimmt, wieviele Links „um den Link der aktiven Seite“ angezeigt werden. Für den zweiten Parameter empfiehlt sich deshalb eine ungerade Zahl.

Das Ganze sieht dann so aus:

P.S.: Nicht vergessen, den alten Code für die herkömmliche Navigation auszukommentieren bzw. zu löschen ;)

Kommentare

Die Thematik Seitennummerierung im WordPress-Blog machte mir neulich ebenfalls viel Spass und ich habe eine Pagination im Blog zum ersten Mal eingesetzt.

Jedoch hatte ich dafür ein Plugin namens WP-Page Numbers verwendet. Bei vielen Unterseiten im Blog ist eine Seitennummerierung nicht verkehrt.

Kommentar #1 von Alex L. am 02. Januar 2010


Vielen Dank für den Code, den ich sofort in meine functions.php gepackt habe. Ich hatte drauf verzichtet, weil ich kein Plugin einsetzen wollte. So ist mir das lieber. Die Performance hat sich lt. YSlow nicht verschlechtert. Das ist bei den Plugins für diesen Zweck nicht immer so. Prima!

Kommentar #2 von ap am 01. Februar 2010


Feine Sache, feine Sache! Vielen Dank für diesen tollen Code!

Kommentar #3 von Luigi am 01. Februar 2010


So, das hab ich bei mir nun auch umgesetzt – eine feine Sache. Herzlichen Dank dafür :-)

mit „$wp_query->max_num_pages;“ müssten doch alle Seiten geladen werden – verstehe ich das richtig? Ich wundere mich, dass nicht alle Seiten angezeigt werden(?)

Kommentar #4 von plerzelwupp am 03. Februar 2010


Wie meinst du das mit allen Seiten?
Je nachdem, welche Parameter du beim Funktionsaufruf eingibst, werden Seiten per […] ausgeblendet, weil die Navigation später nicht mehr alles aufnehmen kann.

Kommentar #5 von Patrick am 04. Februar 2010


Ja das weiß ich wohl. So doof bin ich nun auch nicht ;-)

Nein, es werden nicht alle Artikel (Seiten) erfasst. Da fehlt noch ein ganzer Schwung (am Ende).

Kommentar #6 von plerzelwupp am 04. Februar 2010


Hmm… eigentlich sollte das so laufen… bei mir läuft das wunderbar :)

Kommentar #7 von Patrick am 04. Februar 2010


Um genau zu sein – die ersten 21 Artikel (chronologisch gesehen) fehlen am Ende der Pagination. Bei 8 Artikeln pro Seite fehlen ergo 3 Seiten.

Sehr seltsam.

Kommentar #8 von plerzelwupp am 04. Februar 2010


Also wenn ich auf deine Seite gehe und dort auf die letzte Seite klicke, dann ist es auch die letzte mögliche Seite. Durch manuelles umschreiben der URL auf eine Seite weiter, bekommst du ein Error 404, also muss bei dir irgendwas falsch laufen.

Kommentar #9 von Patrick am 04. Februar 2010


Ich hab den Fehler gefunden.

Mensch, das ist aber auch bekloppt: In meinem Theme kann ich einstellen, wieviel Beiträge pro Seite eingestellt werden – das Stand auf 8.

In WordPress (unter Einstellungen/ Lesen) waren allerdings 10 eingestellt.

Sobald ich diese beiden Werte angleiche, stimmt das Ganze.

Ist aber auch bekloppt, dieses zusätzliche Theme-Feature im WP-Frontend – das hab ich ganz vergessen. Außerdem wundert’s mich, dass die Theme-Macher da eine weitere Variable verwenden.

Naja egal – es funzt – herzlichen Dank :-)

Kommentar #10 von plerzelwupp am 04. Februar 2010



Moin Patrick,

vielen Dank für Deinen Code. Habe es gerade installiert, einfach super und wieder ein Plugin gespart.

Gruß aus Heide

Kommentar #12 von Thomas am 04. März 2011


Hallo Patrick,

besten Dank für Deinen Hinweis. Momentan nutze ich noch das WP-Pagenavi Plugin für meinen blog.
Kennst Du eine Möglichkeit für folgenden Aufbau:
vor (linksbündig) Seitenzahlen (zentriert) zurück (rechtsbündig)?

Beste Grüße aus dem Süden.

Kommentar #13 von ThilliMilli am 19. März 2011


Hallo Patrick,

lieben Dank für die schlanken und sauber programmierten Codeschnipsel.

Dein Zitat:
„[…] Aufgrund dessen habe ich mir ein paar Pagination-Plugins angeschaut, war aber mit keinem so recht zufrieden“

MEINE Rede! Das WP-PlugIN „Pagebar2“ hat mir zum Beispiel den kompletten Header in der Darstellung zerhackt.
Deine Lösung finde ich daher am besten.
Die CSS-Farbdaten konnte ich von „Pagebar2“ geradezu übernehmen und es in deinen CSS-Block pasten.

Beste spätnächtliche Grüße,
Ralph

Kommentar #14 von Ralph am 23. Juni 2011



Funktioniert prima! Vielen Dank!

Kommentar #16 von Bernhard am 07. Februar 2012


…irgendwie bekomm ichs grad nicht hin, hat jemand eine Schritt für Schritt anleitung da? Danke im Vorraus…

Kommentar #17 von Tobi am 11. Februar 2012


1. Den Inhalt der pagination.php in die functions.php deines Themes kopieren (oder functions.php mit dem Inhalt anlegen, falls nicht vorhanden).

2. Den Inhalt der pagination.css an das Ende des Stylesheets (style.css) deines Themes kopieren

3. Einen der beiden oben angegebenen Codes an die entsprechende Stelle deines Themes kopieren. Wo das genau ist, kann ich dir nicht sagen, das ist von Theme zu Theme unterschiedlich.

Kommentar #18 von Patrick am 12. Februar 2012


Vielen Dank, eigentlich kinderleicht…hatte aber gestern nach der Nachtschicht irgendwie einen Totalblackout ;) ….heute eingebaut, bissel die CSS angepasst und funktioniert super ;)

Danke nochmal…

Kommentar #19 von Tobi am 12. Februar 2012


Patrick – Vielen Dank!

Dein Code funktioniert hervorragend, ist simpel, auf’s wesentliche reduziert und einfach anzupassen.

Deine Funktion ist längst fester Bestandteil meiner Snippet-Sammlung geworden!

Beste Grüße und vielen Dank noch einmal,
Dan

Kommentar #20 von Dan am 07. Juni 2012


Hallo,
ich wollte auch gerne so eine Pagination-Funktion haben, jedoch scheiterts bei mir mit der Erklärung „… in entsprechende Stelle deines Themes kopieren“ … Nach was sollte ich denn Ausschau halten, damit ich diese Stelle finde?!

Ich benutze zu Zeit des Theme „Grey Opaque“ von H.-Peter Pfeufer.

Kommentar #21 von Daniel am 30. November 2012


Sorry, da kann ich nicht weiterhelfen, jedes Theme ist anders. Du musst dich selber ein wenig in PHP und WordPress einarbeiten.

Kommentar #22 von Patrick am 30. November 2012


Pingback #23 von Bye, bye Articles und WP-PageNavi | Sylvis Blog am 12. Februar 2013


Hi Patrick,

ich probierte heute deinen Code einzubauen. An der entsprechenden Stelle innerhalb des Loops in der category.php platzierte ich die Funktion, leider wird nichts angezeigt. Was mache ich falsch? CSS ist natürlich angepasst.

Kommentar #24 von Max am 14. Februar 2013


Hallo Max,

der Aufruf sollte eigentlich in keine Schleife rein, es sei denn, man möchte die Pagination mehrfach anzeigen lassen. Kann es sein, dass er die Methode nicht findet, also du die Methode nicht richtig eingebunden hast? Teste einfach mal ohne das if(function_exists(‚pagination‘)). Wenn dann ein Fehler ausgegeben wird, hast du die Funktion nicht richtig eingebunden.

Gruß
Patrick

Kommentar #25 von Patrick am 14. Februar 2013


Hallo Patrick,

das Problem scheint ja schon wo ganz anders zu beginnen. Trotz „posts_per_page = 5“ (und genug Artikeln um mindestens 9 Seiten zu erzeugen) wird nicht mal previous_posts_link bzw next_Posts_link angezeigt. Das ist echt komisch.

Kann es damit zusammenhängen, dass ich ein Page-Tamplate verwende und kein archive/category-Template verwende?

Kommentar #26 von Max am 14. Februar 2013


Hmm sorry, da bin ich überfragt, ich weiß nicht, was du da konfiguriert hast.

In der Pagination Funktion ist auf jeden Fall eine Überprüfung drin, ob man sich auf einer Einzelseite (sprich, ob man einen Artikel geöffnet hat) befindet. In dem Fall wird die Pagination nicht erzeugt.

Kommentar #27 von Patrick am 14. Februar 2013


Hm, wäre ein Seiten-Template mit einem Loop nicht dann auch erst mal eine „single“? Würde zumindest einiges erklären.

Kommentar #28 von Max am 15. Februar 2013


Hinterlasse einen Kommentar