Eine Kundin wollte letztens auf einer WordPress Seite neben zwischen den „statischen“ Inhalten die letzten Beiträge ausgeben. WP bietet da leider keine Lösung out-of-the-box. Daher kam mir die Shortcode-Funktion von John Turner gerade recht und die möchte ich gerne hier teilen.
Folgende Funktion fügt man in der functions.php des genutzten WordPress-Themes ein und stellt somit diese per Shortcode bereit:
function derLoop($atts, $content = null) { extract(shortcode_atts(array( "pagination" => 'true', "query" => '', "category" => '', ), $atts)); global $wp_query,$paged,$post; $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query(); if($pagination == 'true'){ $query .= '&paged='.$paged; } if(!empty($category)){ $query .= '&category_name='.$category; } if(!empty($query)){ $query .= $query; } $wp_query->query($query); ob_start(); ?> <h2><?php echo $category; ?></h2> <ul class="loop"> <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php echo $thumbnail_image; the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php if($pagination == 'true'){ ?> <div class="navigation"> <div class="alignleft"><?php previous_posts_link('« zurück') ?></div> <div class="alignright"><?php next_posts_link('weiter »') ?></div> </div> <?php } ?> <?php $wp_query = null; $wp_query = $temp; $content = ob_get_contents(); ob_end_clean(); return $content; } add_shortcode("loop", "derLoop");
Eingebaut wird der Shortcode dann folgendermaßen direkt im Editor oder in einem Textwidget:
[loop category="news" query="" pagination="false"]
Wie man sieht, kann man die Kategorie wählen, die Paginierung ein und ausschalten und ggfs. den Loop noch erweitern.
Fazit: Mit dieser Lösung kann man ganz easy die letzten Beiträge an beliebiger Stelle einfließen lassen. Wer nicht weiß, wie das real umzusetzen ist, fragt den WordPress-Entwickler seines Vertrauens.
Chris
Moin René,
der Code funktioniert soweit super. Gibt es eine Möglichkeit, den Beitrag auch samt Textauszug und dem zugehörigen Beitragsbild anzeigen zu lassen?
Beste Grüße
Chris
René Dasbeck Post author
Das geht sicher. Ich denke durch den Einbau von the_post_thumbnail und the_content (oder the_excerpt).
Micha
Danke, ich war schon zweifelt am suchen… Gerne mehr davon! LG Micha
Theodor
Hallo,
danke für den tollen Tipp.
Gibt es auch eine Möglichkeit wen in dem Theme ein Link vorhanden ist wie „alle Post“ diesen umzubiegen, dass er wirklich alle Posts zieht.
Im Moment zeigt dieser immer nur die Homepage an.
Gruss Theo
flowery
Hallo, ich suche die Möglichkeit, jeweils den letzten Beitrag jeder Kategorie anzuzeigen. Wie kann ich das einstellen?
derneue
Hallo und danke für den Code.
Hat jemand eine Idee wie das Script aussehen könnte um die Beiträge erscheinen zu lassen wie auf der Startseite. Sprich der Text und weiterlesen Link wird ebenfalls angezeigt.
Vielen Dank im Voraus.
Christian
Hallo,
klappt bis jetzt 1A.
Wie müsste das ganze den aussehen wenn man zusätzlich zum Titel noch die ersten 400-500 Buchstaben des jeweiligen Artikels ausgeben möchte?
IQ Option Erfahrung
Danke für den Tipp, habe das versucht und das geht 🙂
Jasmina
Endlich einen guten Tipp gefunden…Danke dafür! Mein einziges Problem ist jedoch gerade, dass der Loop zwar zu greifen scheint, aber im Frontend auf der Seite nur „news“ ausgegeben wird…ansonsten sehe ich da leider nichts. Hast du zufällig eine Idee, woran das liegen könnte?
René Dasbeck Post author
Hallo Jasmina,
das ist aus der Ferne schwer zu sagen.
nick
War bei mir anfangs auch, musste lediglich die Kategorie von ’news‘ auf ‚Artikel‘ ändern.
terweb
Klare Sache und zudem genial, die noch zu erweitern geht. Wenn Du keine Kategorie „News“ hast, kann das natürlich nicht gehen.
Floutsch
Die Pagination kann hier nicht funktionieren. Das steht drin:
if(pagination == ‚true‘)
Das wäre richtig:
if($pagination == ‚true‘)
Ist mir nur eben aufgefallen. Ich suche noch eine Möglichkeit, hier einen Parameter zu vergeben, der die letzten X Posts ausgibt. Optional und abweichend vom globalen Setting. Irgendeine Idee? 🙂
René Dasbeck Post author
Danke für den Hinweis. Versuch doch mal den Query zu erweitern. Irgendwie so…
$query .= ‚ limit 3‘;
Bettina
Ich suche ebenfalls nach einer Möglichkeit, die letzten x Beiträge auszugeben, bekomme es aber mit deinem Vorschlag nicht hin. Kenne mich auch mit php zu wenig aus. Habt Ihr eine Idee, wie man das umsetzen könnte?
xflow
Danke auch für diesen tollen Tipp!
@bettina oder falls es noch wer anderer braucht:
[loop category=““ query=“posts_per_page=5″ pagination=“false“]
limitiert die Ausgabe auf zb. 5 Posts
David
Hallo
Der Code ist super! Besten Dank!
Kann man den Code auch so anpassen, dass „Keine Posts gefunden“ kommt, falls es keine entsprechende Posts gibt?
Grüsse 6 nochmals besten Dank,
David
René Dasbeck Post author
Ja sicher. Dafür muss man mit
http://codex.wordpress.org/Function_Reference/have_posts
abfragen, ob überhaupt Posts vorhanden sind und ggfs. dann den Text ausgeben.
Lea
Ah danke, hab schon überall im Netz danach gesucht!