In WordPress die letzten Beiträge auf Seiten mit Shortcode anzeigen

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.

Loop per Shortcode einbinden in WordPress

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&uuml;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.

Letzte Version vom 21. November 2014 von Netzgänger
Jetzt WordPress Newsletter in dein Postfach

Melde dich jetzt für meinen Newsletter an und du erhältst regelmäßig Tipps und Tricks zu WordPress in dein Postfach. Natürlich kannst du ihn jederzeit abbestellen.


19 Kommentare

  1. Chris sagt:

    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

  2. Micha sagt:

    Danke, ich war schon zweifelt am suchen… Gerne mehr davon! LG Micha

  3. Theodor sagt:

    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

  4. flowery sagt:

    Hallo, ich suche die Möglichkeit, jeweils den letzten Beitrag jeder Kategorie anzuzeigen. Wie kann ich das einstellen?

  5. derneue sagt:

    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.

  6. Christian sagt:

    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?

  7. Danke für den Tipp, habe das versucht und das geht 🙂

  8. Jasmina sagt:

    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?

  9. Floutsch sagt:

    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? 🙂

    • Danke für den Hinweis. Versuch doch mal den Query zu erweitern. Irgendwie so…

      $query .= ‚ limit 3‘;

      • Bettina sagt:

        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 sagt:

          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

  10. David sagt:

    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

  11. Lea sagt:

    Ah danke, hab schon überall im Netz danach gesucht!

Kommentar schreiben

Mit Absenden deines Kommentars erklärst du dich mit der Verarbeitung deiner hier angegebenen Daten einverstanden (Datenschutzerklärung). Diese werden nur zur Verwaltung der Kommentare verwendet und keinem anderen Zweck zugefügt. Du kannst jederzeit per E-Mail an info@netz-gaenger.de der Speicherung deiner Daten widersprechen.

* Notwendige Angaben

Netzgänger Webdesign | Rohrersmühlstraße 22 in Schwabach | Bayern
Kontakt: info@netz-gaenger.de
↑ oben
Inhalt