
Die Blätterfunkion/ Pagination auf Webseiten hat sich schon immer bewährt und wer mit WordPress arbeitet kennt das eine oder andere Plugin für diese Lösung. Oft kommen dabei viele Funktionen für das Einstellen mit und die brauche ich eher selten. Ich nutze daher eine eigene Lösung und die möchte hier vorstellen, da sie nun auch mit Parametern umgehen kann und so sollte sie in vielen Bereichen einsetzbar sein. Sie kann natürlich beliebig angepasst und für die eigenen Zwecke verändert werden.
Eine schöne schlanke Alternative gibt ebenfalls bei Sergej zu finden und ein Blick lohnt sicher. Er stellt auch ein Beispiel für die Formatierung bereit.
Beispiel Screenshots

Die Funktion
Die folgende Funktion stellt den Kern da und kann als Plugin oder im Theme, in der functions.php abgelegt werden. Der Code-Abschnitt im Anschluss stellt die Möglichkeit der Anpassung via Hook da, so dass man auf die Parameter zugreifen kann.
function fb_paging_bar( $args = array() ) {
$defaults = array(
'range' => 4,
'custom_query' => FALSE,
'previous_string' => __( '«««', FB_GREYFOTO_TEXTDOMAIN ),
'next_string' => __( '»»»', FB_GREYFOTO_TEXTDOMAIN ),
'view_fp' => TRUE,
'view_lp' => TRUE,
'before_output' => '<div class="postlink">',
'after_output' => '</div>'
);
$args = wp_parse_args(
$args,
apply_filters( 'fb_paging_bar_defaults', $defaults )
);
$args['range'] = (int) $args['range'] - 1;
if ( !$args['custom_query'] )
$args['custom_query'] = @$GLOBALS['wp_query'];
$count = (int) $args['custom_query']->max_num_pages;
$page = intval( get_query_var( 'paged' ) );
$ceil = ceil( $args['range'] / 2 );
if ( $count <= 1 )
return FALSE;
if ( !$page )
$page = 1;
if ( $count > $args['range'] ) {
if ( $page <= $args['range'] ) {
$min = 1;
$max = $args['range'] + 1;
} elseif ( $page >= ($count - $ceil) ) {
$min = $count - $args['range'];
$max = $count;
} elseif ( $page >= $args['range'] && $page < ($count - $ceil) ) {
$min = $page - $ceil;
$max = $page + $ceil;
}
} else {
$min = 1;
$max = $count;
}
$echo = '';
$previous = intval($page) - 1;
$previous = esc_attr( get_pagenum_link($previous) );
if ( $previous && (1 != $page) )
$echo .= '<a href="' . $previous . '" title="' . __( 'previous', FB_GREYFOTO_TEXTDOMAIN) . '">' . $args['previous_string'] . '</a>';
$firstpage = esc_attr( get_pagenum_link(1) );
if ( $args['view_fp'] && $firstpage && (1 != $page) )
$echo .= '<a href="' . $firstpage . '">' . __( 'First', FB_GREYFOTO_TEXTDOMAIN ) . '</a>';
if ( !empty($min) && !empty($max) ) {
for( $i = $min; $i <= $max; $i++ ) {
if ($page == $i) {
$echo .= '<span class="active">' . str_pad( (int)$i, 2, '0', STR_PAD_LEFT ) . '</span>';
} else {
$echo .= sprintf( '<a href="%s">%002d</a>', esc_attr( get_pagenum_link($i) ), $i );
}
}
}
if ($args['view_lp']) {
$lastpage = esc_attr( get_pagenum_link($count) );
if ( $lastpage && ($count != $page) ) {
$count = str_pad( (int)$count, 2, '0', STR_PAD_LEFT );
$echo .= '<a href="' . $lastpage . '">' . __( 'Last', FB_GREYFOTO_TEXTDOMAIN ) . '(' . $count . ')' . '</a>';
}
}
$next = intval($page) + 1;
$next = esc_attr( get_pagenum_link($next) );
if ($next && ($count != $page) )
$echo .= '<a href="' . $next . '" title="' . __( 'next', FB_GREYFOTO_TEXTDOMAIN) . '">' . $args['next_string'] . '</a>';
if ( isset($echo) )
echo $args['before_output'] . $echo . $args['after_output'];
}
Im Template, wo die Pagination genutzt werden soll, wird einfach die Funktion aufgerufen:
<?php if ( function_exists('fb_paging_bar') ) fb_paging_bar(); ?>
Beispiel für Anpassungen
Für eigene Argumente steht ein Hook bereit und mittels diesem Hook kann jeder Parameter des Arrays $args angepasst werden.
function change_fb_paging_bar_defaults($args) {
$args['previous_string'] = ''; // empty string
$args['next_string'] = '';
return $args;
}
add_filter('fb_paging_bar_defaults', 'change_fb_paging_bar_defaults');
Viel Freude damit und für Hinweise, Ideen und Verbesserungen bin ich wie immer dankbar.
Hallo Frank,
gibt es dafür nicht extra diese Funktion?
http://codex.wordpress.org/Function_Reference/paginate_links
@Ralf: ja, die gibt es; war mir aber bisher wenig bekannt und ist für den Laien nicht gerade bedienbar; via Google habe ich zumindest keine Lösung gefunden; immer nur Anpassungen für Backend. Eventuell hast du ja was und magst einen Gastbeitrag erstellen?
Hallo Frank, ja das wäre mir natürlich eine Ehre bei dir einen Beitrag zu veröffentlichen.
Ich schau mal, dass ich etwas zusammen bastele und dir zuschicke.
@Ralf: es wäre mir ein Ehre den Beitrag von dir zu veröffentlichen!
Ehrenmänner unter sich
Der Tipp mit der Blätter funktion ist einfach genial uns supa flexibel. Danke
Die Funktion selber ist ja wirklich nicht schlecht, aber gibts nicht für Leute, die nicht viel mit Quelltexten rumspielen wollen, ein schönes Plugin, das man einfach installieren kann?
lg
Christian
Die Idee ist wirklich sehr gut!
Ich schließe mich dem Kommentar von Christian an; ein Plugin wäre nicht schlecht.
Ich gehören zu den Anfängern in WordPress und bin noc nicht so versiert.
Euch einen schönen Tag
@Christian @Jörg: dazu gibt es bereits einige Plugins, da reicht eine Suche im offiziellen Repository von WP.
Hallo zusammen,
schade das ich das nicht hinkriege. Wäre genau das, was ich bisher vermisst hatte. Bei mir erscheint nämlich: nix. Wo genau müssen denn die Codes eingetragen werden? Oder ist das für einen Halbwissenden zu kompliziert?
Lieben Gruß aus dem Bergischen
Dieter
@Dieter: die Funktion kommt in die functions.php des Themes und wird in der index.php, archive.php und category.php aufgerufen, wenn sie denn existieren. Dies kann beliebig komplex werden. Der Aufruf der Funktion muss direkt nach der while-Schleife des Loop kommen. Alternativ ein Plugin mit der Funktion nutzen, die erleichtern den Einbau in der Regel.
Sehr interessant, aber für einen Neueinsteiger in WP doch noch etwas komplex. ich habe zwar schon fast 15 jahre Erfahrung mit PHP, aber das einarbeiten in Fremdcode ist immer noch schwierig.
Aber der Effekt ist gut, das ich es versuchen werde.
Die Version von Sergej kann ich immer nur wärmstens empfehlen..super easy und tut was es soll.
Vielen Dank für die Bereitstellung des Codes Frank. Also wenn ich das richtig verstanden habe, brauche ich entweder ein PlugIn wie Wp PageNavi oder ich kann alternativ deinen Code nehmen. Habe ich das so richtig verstanden?
@Daniel: ja, genauso ist es.
Habe mich ebenfalls für das PlugIn von Sergej entschieden. Eine sehr einfache, aber effiziente Lösung. Werde es weiterempfehlen.
Hallo, Danke für den Beitrag, aber der Blog, den ich teils mit betreue, hat von Haus aus die Pagination. Warum brauchts dann den Code wie oben beschrieben? Wenn ich bei den Postings einstelle "maximal 3 Posts auf der Startseite", so bekomme ich automatisch unten einen Paginator zum Blättern auf die nächsten Seiten.
hmm, ich hab mir darüber nie gedanken gemacht! - aber so eine Blätterfunktion dürfte gewiss besser sein, als meine jetzige.
Danke für den Tipp.
Zum Post von Stefan B.: Prinzipiell hast du recht, jedoch bieten der hier beschriebene Code bzw. das PlugIn wesentlich umfangreichere Einstellmöglichkeiten. Probiere es doch mal aus.
Für meine Anwendung ist es völlig ausreichend und leicht umzusetzen. Vom Handling her (aktivieren/deaktivieren) ist natürlich ein Plugin besser, so kann ich es aber noch nach meinen Wünschen anpassen. Danke für den Code! Frohe Tage
Wir werden das gerne mal ausprobieren. Danke für die ausführliche Dokumentation. Hoffentlich kriegen wir das so hin. Mal sehen. Die Hoffnung stirbt zuletzt
Vor allem auch Gründen der Suchmaschinenauffindbarkeit wird eine anständige Blätterfunktionalität oftmals vernachlässigt. Google muss die Seiten eben irgendwie finden können.
Danke für den Beitrag, Ich habe es soeben auf meinem Fotoblog im Archiv eingebaut und es funktioniert einfach Klasse. Nur ein wenig CSS Anpassungen und es es ist perfekt.
Hab jetzt auch schon das ein andere Plugin getestet und diese Lösung hier finde ich auch noch nicht ganz optimal. Das muss doch irendwie leicher sein, denn es gibt einfach viele User die technisch nicht so versiert sind und damit immer Proleme haben werden
Das Plugin von Sergej ist doch sehr einfach in der Bedienung, finde ich. Dafür ist der Funktionsumfang halt nicht so berauschend.
man kann das also auch als Plugin einsetzten,denn ich habe das schon mal probiert bei eine anderen Blog und das ging voll in die Hose, welches Plugin ist dafür am beste?
Hi und vielen Dank für den Code. Ich werde das bei Gelegenheit mal einbauen in meinem Block. Hoffe, ich bekomme es hin.
Danke für den hilfreichen Code. Werde ihn allerdings wohl kaum auf meinem eigenen Blog verwenden, das ewige rumgeklicke für 3 Zeilen Text und ein Riesen-Bild das oft aus der nett gemeinten Einteilung in Seiten entsteht mag ich selber nicht und will das auch keinem Leser zumuten.
Soll nicht heissen das man das ganze auch sinnvoll einsetzen kann.