Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

Wordpress Paginierung-Funktion

#Tutorials#Wordpress

In diesem Tutorial habe ich eine Funktion für euch, die eine Paginierung in eurem Wordpress-Blog hinzufügt.

Es ist relativ einfach - Fügt einfach die folgende Funktion in eure functions.php ein.


function get_pagination($range = 4){
  // $paged - Nummer der derzeitigen Seite
  global $paged, $wp_query;
  // Wieviele Seiten haben wir?
  if ( !$max_page ) {
    $max_page = $wp_query->max_num_pages;
  }
  // Wir brauchen die Paginierung nur wenn es mehr als eine Seite gibt
  if($max_page > 1){
    if(!$paged){
      $paged = 1;
    }
    // Auf der ersten brauchen wir nicht den Erste-Link
    if($paged != 1){
      echo "<a href=" . get_pagenum_link(1) . "> Erste </a>";
    }
    // Zu vorherigen Seite
    previous_posts_link(' « ');
    // Wir brauchen den Slideeffekt nur, wenn die Seiten den Umfang ($range) uebersteigt
    if($max_page > $range){
      // When closer to the beginning
      if($paged < $range){
        for($i = 1; $i <= ($range + 1); $i++){
          echo "<a href='" . get_pagenum_link($i) ."'";
          if($i==$paged) echo "class='current'";
          echo ">$i</a>";
        }
      }
      //Wenn wir uns dem Ende naehern
      elseif($paged >= ($max_page - ceil(($range/2)))){
        for($i = $max_page - $range; $i <= $max_page; $i++){
          echo "<a href='" . get_pagenum_link($i) ."'";
          if($i==$paged) echo "class='current'";
          echo ">$i</a>";
        }
      }
      // Irgendwo in der Mitte
      elseif($paged >= $range && $paged < ($max_page - ceil(($range/2)))){
        for($i = ($paged - ceil($range/2)); $i <= ($paged + ceil(($range/2))); $i++){
          echo "<a href='" . get_pagenum_link($i) ."'";
          if($i==$paged) echo "class='current'";
          echo ">$i</a>";
        }
      }
    }
    // Weniger Seiten als der Umfang - keine Slide noetig
    else{
      for($i = 1; $i <= $max_page; $i++){
        echo "<a href='" . get_pagenum_link($i) ."'";
        if($i==$paged) echo "class='current'";
        echo ">$i</a>";
      }
    }
    // Naechste Seite
    next_posts_link(' » ');
    // Auf der letzten Seite kein Letzte-Link
    if($paged != $max_page){
      echo " <a href=" . get_pagenum_link($max_page) . "> Letzte </a>";
    }
  }
}

Ich habe sie mit deutschen Kommentaren versehen, damit man weiß, wo was passiert. Als nächstes müsst ihr die Funktion nur aufrufen. Am besten sucht ihr in eurem Template, wo die Paginierung sonst erstellt wird. Bei Twentyten beispielsweise ist sie in der loop.php ganz oben und ganz unten. Dort fügt ihr dann folgenden Code ein:

<div class="paginationBottom">
	<?php get_pagination(); ?>
</div>

Wenn ihr das erledigt habt, sollte schonmal die Paginierung herauskommen, aber ungestylt.

Das Styling auf meiner Seite sieht wie folgt aus. Natürlich könnt ihr die das Styling individuell anpassen.


/* Pagination */

.paginationBottom {
	display: block;
	text-align: right;
	margin-top: 10px;
	margin-bottom: 30px;
}
.paginationBottom a{
	text-align:center;
	padding:5px 10px;
	margin:0 2px 0 2px;
	border:1px solid #58585A;
}
.paginationBottom a:hover{
	background:#8cc01e;
	color: #fff;
}

.paginationBottom a.current {
	border: 1px solid #F5F5F5;
}

Kommentare

  • Edelmut Struth
    Bei mir ergibt $wp_query->max_num_pages 3 Seiten, was nicht stimmt. Ich habe eine category.php mit 25 Beiträgen mit posts_per_page = 3. Schön wäre es zu wissen, auf welche Argumente, auf welches Query oder ob nur auf den Wordpress-loop sich die 3 Seiten beziehen. $wp_query->max_num_pages muss sich ja auf etwas beziehen, was ich leider nicht weiß!

    Freue mich auf jede Antwort!
    Antworten
  • André Knieriem
    Hallo Karsten, eigentlich sollte das genauso funktionieren. Erstelle eine funktions.php in deinem Childtheme und kopiere den Code oben herein. Dann kannst du die Funktion einfach aufrufen. Natürlich geht das nur bei Seiten, die auch mehrere Einträge haben. Also Artikeln.

    Grüße
    Antworten
  • Karsten Zarth
    Hallo Andre,

    weißt du wo die Paginierung im Theme twentytwelve vorgenommen wird? Habe ein Child-Theme angelegt, welches auf twentytwelve zugreift. Vielleicht sollte ich mir einfach eine loop.php in meinem Childtheme erstellen?

    Gruß

    Karsten
    Antworten

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.