dynamicinternet Webdesign

Das Blog

Themen, Tutorials sowie Tipps & Tricks über Webdesign, (X)HTML und CSS, Programmierung, WordPress und was uns sonst noch bewegt.

RSS abonnieren

Seitenpagination bei get_posts

Möchte man seine Beiträge auf der Startseite oder einer Katgorieseite etwas anders präsentieren und braucht dazu eine Anzahl Posts, die von der im Backend eingestellten Anzahl der Posts pro Seite abweicht, bekommt man zwangsläufig ein Problem mit der Seitenblättern-Funktion. Das liegt daran, das WordPress und auch diverse Paging-Plugins $wp_query->max_num_pages abfragen.

max_num_pages ist ein Resultat aus verfügbaren Posts geteilt durch die eingestellte Anzahl der Posts pro Seite. Haben wir zum Beipiel 10 Posts pro Seite eingestellt und brauchen auf der Startseite beispielsweise 6 Posts, geht die ganze Rechnung nicht mehr auf.
Meine Lösung funktioniert mit der WordPress-eigenen Blätterfunktion sieht folgendermaßen aus:

//die Anzahl der im Backend eingestellten Posts pro Seite ermitteln
$ppp = get_option('posts_per_page');
 
// Startseite
if (!is_paged()) {
    $posts = get_posts('numberposts=6');
// 2. Seite mit Offset von Startseite
} elseif($paged == 2) {
    $posts = get_posts('offset=6');
// alle weiteren Seiten
} else {
    $offset = $ppp*($paged-2)+6;
    $posts = get_posts('offset='.$offset);
}
//dann ausgeben
if($posts) :
    foreach ($posts as $post) :
        ...
    endforeach;
endif;
2 Kommentare
  1. Basti sagt:

    Hallo,

    ich kämpfe seit langem mit folgendem Problem:

    ich arbeite viel mit conditional-tags, um zum Beispiel in der Navigation anzuzeigen, wo der Benutzer gerade ist.

    z.B. bei einer Seite:
    if (is_page(5)) $active = 3;

    Wenn $active 3 ist, weiß ich, welchem Navi-Punkt ich eine “aktiv” – CSS – Klasse zuweisen muss.

    Jetzt kommt das Problem:

    Oft habe ich unter manchen Seiten einen Loop. Dieser Loop “zerstört” mein Conditional Tag.

    Beispiel:

    Ich zeige Seite Nummer 5 an, darunter einige Posts einer Kategorie.
    Gewünscht wäre, dass is_page(5) “true” ist.
    Leider ist jedoch jetzt is_category() “true”…

    Umgehen kann man dieses Problem mit get_posts(), foreach, usw.

    Ich hab herausgefunden, dass the_post(); dieses Problem verursacht.

    Im Prinzip kann man mit get_posts(); alles super umgehen, ausser jedoch die Pagination. Die funktioniert wohl nur mit wp_query, the_post(); usw.

    Lange Frage, ich weiß, ich fands nur nicht ganz leicht, das Problem verständlich zu machen. Vielleicht kann mir trotzdem jemand bei dieser Sache helfen?

    1000 Dank

    Basti

  2. Micha sagt:

    Basti, ohne den Code in deinem Theme zu sehen, ist es schwer, ein Urteil abzugeben. Hast du deine conditional Tags vor oder nach den Loops?

1 Pingback
  1. Wordpress Plugin - Wordpress
Einen Kommentar schreiben