Artikelliste per Shortcode und Query_Posts in WordPress-Beitrag ausgeben
In WordPress kann das Abbilden von Überschriften und Auszügen weiterer Artikel in einem Beitrag manchmal gehörig Schwierigkeiten bereiten. Zahlreiche Tipps und Workarounds kursieren im Netz, viele davon erfordern weitere Plugins, welche Feeds einlesen können oder das Ausführen von PHP ermöglichen. Neben den bekannten Sicherheitsrisiken ist das Einbinden gerade in den Editoren nicht besonders einfach. Der Code wird vielleicht “zerhackt” oder der Artikel muss in purem HTML geschrieben werden.
Nachfolgend will ich eine Lösung präsentieren, die recht einfach in ein bestehendes Template zu implementieren ist. Natürlich kann die Ausgabe weiter verfeinert und angepasst werden. Wir nutzen für die Ausgabe zum einen die Shortcode-Funktion sowie die Query_Posts-Funktion von WordPress. Im vorliegenden Fall sollen alle Artikel ausgegeben werden, die mit einem entsprechenden Stichwort “getagged” sind. Neben der verlinkten Überschrift soll zudem ein kurzer Auszug abgebildet werden.
Im Beitrag wird lediglich folgendes eingetragen:
[postlist stichwort="das_gewünschte_stichwort"]
Die Variable wird über eine Funktion in der functions.php im Templateverzeichnis ausgeführt. Dort wird die Variable eingelesen, die entsprechenden Posts werden in der Datenbank gesucht und in eine Liste formatiert und wieder ausgegeben.
Die functions.php muss daher um folgenden Code erweitert werden:
// [postlist stichwort="das_gewünschte_stichwort"]
function postlist_func($atts) {
extract(shortcode_atts(array(
'stichwort' => '',
), $atts));
query_posts('posts_per_page=-1&tag=' . $stichwort);
$output = '';
$temp_title = '';
$temp_link = '';
if (have_posts()) : while (have_posts()) : the_post();
$temp_title = get_the_title($post->ID);
$temp_link = get_permalink($post->ID);
$temp_desc = get_the_excerpt($post->ID);
$output .= "<li>
<h4><a href='$temp_link'>$temp_title</a></h4>
$temp_desc
</li>";
endwhile;
else:
$output .= "<li>Keine Einträge vorhanden.</li>";
endif;
wp_reset_query();
return "<ul>" . $output . "</ul>";
}
add_shortcode('postlist', 'postlist_func');
Soll die Anzahl der auszugebenden Posts generell begrenzt werden, kann man in Zeile 6 bei “posts_per_page” den Wert von -1 (alle Posts) auf den gewünschten Zahlenwert einstellen.




0
