Mit get_posts kann man einen gewünschten Post anzeigen und dabei nicht nur auf title, sondern auch excerpt, content, custom fields etc abfragen. Um in WordPress abzufragen, welches der vorherige oder nächste Post ist, geht man so vor:
next_post und prev_post in WordPress abfragen
Zunächst einmal speichere ich die ID des aktuellen Posts in einer Variablen, denn da man mit get_posts weitere Beiträge abfragt, funktioniert die Abfrage $post->ID
später nicht mehr richtig. Dann rufe ich mit get_posts alle Artikel ab. Da per default nur die letzten 5 Artikel abgerufen werden, gibt man hier das Parameter numberposts=-1 mit, damit werden dann wirklich alle Artikel abgerufen. Will man den nächsten oder vorherigen Artikel nur aus der aktuellen Kategorie abfragen, hängt man das entsprechende Parameter einfach an.
$aktuell = $post->ID; $allePosts = get_posts('numberposts=-1'); |
Anschließend werden alle der abgerufenen IDs in einem Array gespeichert, dieses heißt im Beispiel $postarray.
$postarray = array(); foreach ($allePosts as $post) { $postarray[] += $post->ID; } |
Wo in diesem Array befindet sich nun der aktuelle Beitrag? Dies wird mit der Variable $current abgefragt
$current = array_search($aktuell, $postarray); |
$current sagt also, an welcher Position in diesem Array der aktuell angezeigte Beitrag ist. Davon ausgehend fragt man also ab, welche Post-ID an der Stelle davor und danach steht:
$prevPost = $postarray[$current-1]; $nextPost = $postarray[$current+1]; |
Mit diesen beiden IDs und get_posts kann man also den vorherigen und nächsten Beitrag anzeigen:
<?php global $post; $myposts = get_posts('include=' . $prevPost); foreach($myposts as $post) : setup_postdata($post); ?> <div class="prevPost"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> <a href="<?php the_permalink(); ?>">lesen</a> </div> <?php endforeach; ?> |
Zusammenfassung: prev_post und next_post ausgeben
Hier nochmal der gesamte Code im Überblick
<?php $aktuell = $post->ID; // ID von aktuellem Beitrag $allePosts = get_posts('numberposts=-1'); // alle gewünschten Posts abfragen $postarray = array(); // und in Array speichern foreach ($allePosts as $post) { $postarray[] += $post->ID; } $current = array_search($aktuell, $postarray); // Position des aktuellen Beitrags im Array suchen $prevPost = $postarray[$current-1]; // vorherigen Beitrag abfragen $nextPost = $postarray[$current+1]; // nächsten Beitrag abfragen /* mit get_post vorherigen Post ausgeben */ global $post; $myposts = get_posts('include=' . $prevPost); foreach($myposts as $post) : setup_postdata($post); ?> <div class="prevPost"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> <a href="<?php the_permalink(); ?>">lesen</a> </div> <?php endforeach; ?> <?php /* mit get_post nächsten Post ausgeben */ global $post; $myposts = get_posts('include=' . $nextPost); foreach($myposts as $post) : setup_postdata($post); ?> <div class="nextPost"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> <a href="<?php the_permalink(); ?>">lesen</a> </div> <?php endforeach; ?> |
Danke – super, hat mir sehr geholfen 🙂
Hallo Nina,
toller Beitrag. Ich bin leider noch nicht so sehr bewandert in WordPress und PHP. Klappt auch alles soweit gut. Nur leider werden beim ersten und letzten Beitrag plötzlich alle Artikel der Kategorie aufgeführt …
Noch der Hinweis, ich habe Deinen Code innerhalb der Loop platziert, da ich immer nur die Artikel der aktuellen Kategorie sehen möchte.
Gibt es dafür eventuell eine Lösung?
Vielen Dank
Frank
Hi Nina!
Vielen Dank für den Code, hat alles super geklappt! Habe jedoch das gleiche Problem wie Frank, beim ersten und letzten Artikel wirft er alles Artikel aus!
Gibt es hierfür eine Lösung?
Liebe Grüße
Stephan
okay. soweit ganz geil. gibt es hier für die schnelle Verwendung auch ein mögliches Plug-In, um auch für die tägliche Arbeit. Nix gegen das Codieren, aber ein Plugin wäre Nice=)