Letzte Beiträge einer Kategorie auf einer WordPress Seite anzeigen
Samstag, der 20. Oktober 2007. Veröffentlicht von René.Hier eine Anleitung, wie man es schafft, dass Wordpress in einem Beitrag, oder auf einer Seite
- die letzten X Beiträge aller Kategorien oder
- die letzten X Beiträge einer bestimmten Kategorie oder
- die letzten X Beiträge einer Kategorie und deren Unterkategorien
anzeigt. Das ganze kann auch auf Autoren eingeschränkt werden.
Hier ein Beispiel wie sowas dann aussieht:
Die letzten fünf technischen Blog-Einträge
- WordPress Plugin SensitiveTagCloud 1.4.1
- Sidebar bei Default WordPress Theme auch auf Einzelansichts-Seiten von Beiträgen anzeigen
- WordPress Plugin TwitterPosts 1.0.2
- Text online url-/rawurl-/base64-/utf8- kodieren und dekodieren
- WordPress Plugin PostLists - Extensions
ACHTUNG: Mittlerweile habe ich für das Anzeigen von Listen in Beiträgen, Seiten oder Sidebar-Widgets ein WordPress Plugin geschrieben: WordPress Plugin PostLists!
So, und wie geht das jetzt? Zu erst muss das Plugin “Exec-PHP” aktiviert sein (Exec-PHP downloaden und aktivieren), damit PHP-Code in Beiträgen und Seiten ausgeführt wird.
Dann einfach folgenden Code einmal in den Beitrag oder auf die Seite einfügen (bitte den Code-Editor von Wordpress benützen und nicht den visuellen WYGIWYS-Editor):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php if( !function_exists('listposts') ) { function listposts( $headline, $category, $count ) { global $post; $post_old = $post; $posts = get_posts('category='.$category.'&numberposts='.$count.'&offset=0'); if( count($posts)>0 ) : echo $headline; endif; if( count($posts)>0 ) : echo "<ul>"; endif; foreach( $posts as $post ) : echo "<li>"; //the_time('j. m Y'); //echo ", "; //the_time('H:i'); //echo " Uhr: "; echo "<a href='" . get_permalink() . "'>"; the_title(); echo "</a>"; echo "</li>"; endforeach; if( count($posts)>0 ) : echo "</ul>"; endif; $post = $post_old; } } ?> |
Anschließend an der Stelle an der man die Auflistung haben möchte folgende Zeile (auch mehrfach möglich) entsprechend angepasst einfügen:
39 40 41 42 43 44 45 | <?php listposts( "Die letzten fünf technischen Blog-Einträge", // Titel der Auflistung 123, // ID der Kategorie 5 // Anzahl der anzuzeigenden Beiträge ); ?> |
Jetzt werden die letzten 5 Beiträge der Kategorie 123 angezeigt - Ohne Unterkategorien.
Wer auch das Datum und die Uhrzeit der Beiträge anzeigen lassen möchte muss in obigem Code folgende Zeilen einkommentieren, also das “//” am Anfang der Zeilen entfernen:
21 22 23 24 | //the_time('j. m Y'); //echo ", "; //the_time('H:i'); //echo " Uhr: "; |
Das sollte dann so aussehen:
21 22 23 24 | the_time('j. m Y'); echo ", "; the_time('H:i'); echo " Uhr: "; |
Wer die letzten Beiträge aus allen Kategorien anzeigen lassen möchte, kann als Kategorie-Id einfach 0 übergeben:
39 40 41 42 43 44 45 | <?php listposts( "Die letzten fünf Blog-Einträge", // Titel der Auflistung 0, // Aus allen Kategorien 5 // Anzahl der anzuzeigenden Beiträge ); ?> |
So, und wenn ihr wollt das auch die Beiträge aller Unterkategorien dieser Kategorie angezeigt werden, wird es jetzt etwas komplizierter.
In der Datei “post.php” im Ordner “wp-includes” eurer Wordpress-Installation (Wer sich nicht sicher ist: Bitte voher Backup der Datei anlegen falls etwas schief geht) müssen Änderungen vorgenommen werden. Das ist hier Schritt für Schritt erklärt, die fertige Datei steht hier aber auch zum Download bereit (Bitte bei “Eine fertige post.php-Datei für WordPress 2.3 (deutsch)” weiterlesen).
Hier die Schritt für Schritt Anleitung:
Sucht die Funktion get_posts(…), also diese Zeile:
function get_posts($args) {
Darin müsst ihr das Array $defaults um den Eintrag “categories” erweitern. Aus
$defaults = array( 'numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' =>'', 'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0 );
wird also
$defaults = array( 'numberposts' => 5, 'offset' => 0, 'category' => 0, 'orderby' => 'post_date', 'order' => 'DESC', 'include' => '', 'exclude' => '', 'meta_key' => '', 'meta_value' =>'', 'post_type' => 'post', 'post_status' => 'publish', 'post_parent' => 0, 'categories' => 0 );
(Das Komma nach dem bisher letzten Eintrag nicht vergessen!).
Immernoch in get_posts(…) unter
$category = (int) $category;
folgende Zeile hinzufügen:
$categories = (int) $categories;
Und unter
$category = 0;
folgende Zeile:
$categories = (int) $categories;
Jetzt unter
if (!empty($exclusions)) $exclusions .= ')';
folgende Zeilen einfügen:
$categories_array = array(); if( $categories<=0 ) { if( $category>0 ) $categories_array[] = $category; } else { $categories_array[] = $categories; foreach( $categories_array as $category ) { $category = abs( intval( $category ) ); if ( $category>0 ) { $categories_array = array_merge( $categories_array, get_term_children($category,'category') ); } } }
Die Zeile
$query .= empty( $category ) ? '' : ", $wpdb->term_relationships, $wpdb->term_taxonomy ";
gegen
$query .= count($categories_array)==0 ? '' : ", $wpdb->term_relationships, $wpdb->term_taxonomy ";
ersetzen, und die Zeile
$query .= empty( $category ) ? '' : "AND ($wpdb->posts.ID = $wpdb->term_relationships.object_id AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id AND $wpdb->term_taxonomy.term_id = " . $category. ") ";
gegen folgende Zeilen ersetzen:
if( count($categories_array)>0 ) { $query .= "AND ( 0 "; foreach( $categories_array as $category ) $query .= "OR ($wpdb->posts.ID = $wpdb->term_relationships.object_id AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id AND $wpdb->term_taxonomy.term_id = " . $category. ") "; $query .= ") "; }
So, jetzt kann der Funktion get_posts(…) statt “categorie=123″ um die Beiträge der Kategorie 123 aufzulisten, auch “categories=123″ übergeben werden, um auch alle Beiträge der Unterkategorien von Kategorie 123 mit anzuzeigen.
Ach ja, nicht vergessen: Die geänderte Datei wieder auf eurem Webserver abspeichern.
Eine fertige “post.php“-Datei für WordPress 2.3 (deutsch) kann hier heruntergeladen werden (Falls ihr schon andere Änderungen in dieser Datei gemacht habt, würden diese natürlich wieder überschrieben werden sobald ihr die Datei überschreibt):
Dieses Archiv beinhaltet die Datei post.php
Damit auf der Seite dann auch die Beiträge aller Unterkategorien angezeigt werden nur noch im PHP-Code des Beitrags die Zeile
9 | $posts = get_posts('category='.$category.'&numberposts='.$count.'&offset=0'); |
gegen folgende tauschen:
9 | $posts = get_posts('categories='.$category.'&numberposts='.$count.'&offset=0'); |
und fertig.
Achtung, nicht getestet (bitte Feedback geben, ob es funktioniert): Wer nur die Beiträge eines bestimmten Autors anzeigen möchte, muss noch folgende Erweiterung in der “post.php“-Datei vornehmen:
Nach
'categories' => 0
noch
, 'author' => 0
anhängen (auf das Komma achten).
Und dann nach
$categories = (int) $categories;
folgende Zeile einfügen:
$author = (int) $author;
Nach
$categories = 0;
noch
$author = 0;
Und dann nach
$query .= empty( $post_status ) ? '' : "AND post_status = '$post_status' ";
noch diese Zeile hinzufügen:
$query .= empty( $author ) ? '' : "AND post_author = $author ";
Jetzt kann man die Funktion listposts(…) wie folgt erweitern:
Aus
4 | function listposts( $headline, $category, $count ) |
wird
4 | function listposts( $headline, $author, $category, $count ) |
und aus
9 | $posts = get_posts('categories='.$category.'&numberposts='.$count.'&offset=0'); |
muss man
9 | $posts = get_posts('author='.$author.'&categories='.$category.'&numberposts='.$count.'&offset=0'); |
machen, und schon kann man listposts(…) wie folgt aufrufen:
39 40 41 42 43 44 45 46 | <?php listposts( "Die letzten fünf technischen Blog-Einträge", // Titel der Auflistung 1, // ID des Autors 123, // ID der Kategorie 5 // Anzahl der anzuzeigenden Beiträge ); ?> |
Wenn ihr diese Funktionalität öfters Benötigt lohnt es sich natürlich die Funktion in eine Datei zu verschieben und zu inkludieren statt diese jedes mal neu hinzu zu fügen.
Nachtrag: Da diese Anleitung auf Grund der vielen Varianten jetzt etwas unübersichtlich ist, werde ich vermutlich ein Plugin daraus machen. Dann geht das ganze auch ohne PHP-Exec und kann als Platzhalter in jeden Beitrag und auf jede Seite eingefügt werden. Desshalb am besten in den nächsten Tagen hier nochmal reinklicken
![]()
Nachtrag: Das Plugin ist mittlerweile fertig und steht zum kostenlosen Download zur Verfügung: WordPress Plugin PostLists!
Weiterlesen
Kategorien: WordPress
Stichwörter: technisch, web, wordpress
Verwandte Beiträge:


























Am 20. November 2007 um 20:22 Uhr
Vielen Dank für die Anleitung!
Da ist ein kleiner Fehler im Bsp. für alle Beiträge aus allen Kategorien anzeigen:
Wie auch in der Beschreibung geschrieben, sollte der Wert 0 sein.
Bin kein PHP Experte, hat mich jedoch schon gewundert wieso es nicht funktionierte (für alle Kategorien).
(ein Plugin wäre echt klasse)
Am 3. Januar 2008 um 03:39 Uhr
hallo
schickst du mir das plugin, wenn es fertig gestellt ist? genau sowas könnt ich brauchen. ich suche etwas, wo die beiträge nur zeilenweise angezeigt
wird (titel ist schon ok) und dann mit klick darauf der ganze beitrag zu lesen ist.
denke, mit deinem tool könnt das funktionieren.
lg marc
Am 6. Januar 2008 um 18:37 Uhr
Ist es irgendwie möglich, den Titel auf nur z.B. 20 Buchstaben zu kürzen?
Vielen Dank, ist es dann auch möglich nach dem verküzten Titel “…” zu schreiben?
Am 16. Januar 2008 um 00:12 Uhr
Hallo,
vielen Dank, diese Anleitung war die!! Lösung für mein Problem.
Leider scheitere ich nun als Laie an der Sortierung der Liste. Ich möchte diese gerne nach den Titeln der Beiträge (diese habe ich durchnummeriert) angezeigt bekommen. Wo und wie lässt sich das ermöglichen?
VG Saskia.
Am 16. Januar 2008 um 00:30 Uhr
Vielen Dank für die schnelle, unkomplizierte und zudem noch funktionierende Hilfe.
Am 20. Januar 2008 um 06:06 Uhr
Ist das denn auf eine Kategorie beschränkt? Oder geht das auch für mehrere?
Am 26. Februar 2008 um 17:28 Uhr
Am 10. Mai 2008 um 00:10 Uhr
Das ist so ähnlich wie die letzten Beiträge aus eine Forum anzeigen lassen oder?
Ich benutze solche Funktionen schon in einigen Systemen wie Joomla z.b. aber für Wordpress war es mir bisher unbekannt! Daher besten dank!
Am 18. Juli 2008 um 10:06 Uhr
Hallo Rene,
gibt es eine Möglichkeit die ersten 20 Zeichen vom Inhalt des Posts anzeigen zu lassen? Stehe da irgendwie auf dem Schlauch. kann dies evtl. Dein Plug-In?
Schon mal danke für Deine Mühe.
Grüßle
Raphael