WordPress: Themenverwandte Beiträge anzeigen (ohne Plugin)
In diesem Beitrag findet ihr ein Snippet um in WordPress themenrelevante Artikel anzuzeigen.

In vielen Blogs werden themenverwandte bzw. ähnliche Artikel neben oder unter einem Beitrag angezeigt. Das führt i.d.R. dazu, dass die Besucher der Website sich von einem Beitrag zum nächsten bewegen, mehr Unterseiten aufrufen und länger auf der Website verweilen.
Es gibt verschiedene Möglichkeiten ähnliche Beiträge in WordPress anzuzeigen – darunter auch viele Plugin-Lösungen. In diesem Artikel archivieren wir ein WordPress-Snippet, das euch ermöglicht ähnliche Beiträge anhand übereinstimmender Taxonomien (Kategorien, Schlagworte oder benutzerdefinierte Taxonomien) zu identifizieren und anzuzeigen.
Ähnliche Beiträge mit Hilfe von Taxonomien ausgeben
Die themenverwandten Beiträge zeigen wir mit Hilfe eines zusätzlichen Loops an. Das folgende Snippet nutzt einen WP_Query
mit angepassten Argumenten und einem sog. tax_query
, der Beiträge anhand der Taxonomie filtert. Ersetzt den Platzhalter »TAXONOMYNAME
« an beiden Stellen mit dem Namen der Taxonomie, die verwendet werden soll um themenverwandte Beiträge zu identifizieren. Wenn ihr die Standard-Schlagwörter von WordPress als Taxonomie nutzen wollt, ist tragt ihr post_tag
ein. Wenn ihr die Standard-Kategorien nutzen wollt category
.
Mit Hilfe des operators
kann festgelegt werden, ob nur ein übereinstimmender Taxonomie-Wert ausreicht, um den Artikel als themenrelevant einzustufen (IN
) oder ob alle Taxonomie-Werte übereinstimmen müssen (AND
). Der zusätzliche date_query
verhindert, dass Beiträge angezeigt werden, die älter als ein Jahr sind.
Fügt folgendes Snippet an der Stelle ein, an der die themenverwandten Beiträge erscheinen sollen. Im Beispiel wird jeweils nur der Titel angezeigt.
<?php $terms = get_the_terms( $post->ID , 'TAXONOMYNAME', 'string');
$term_ids = wp_list_pluck($terms,'term_id');
$related_args = array(
'post_type' => 'post',
'post__not_in' => array($post->ID),
'ignore_sticky_posts' => 1,
'tax_query' => array(
array(
'taxonomy' => 'TAXONOMYNAME',
'field' => 'id',
'terms' => $term_ids,
'operator' => 'IN' // 'AND'
)
),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-1 year'))
)
);
$related_query = new WP_Query( $related_args );
if ( $related_query->have_posts() ) {
echo '<h3>Themenrelevante Artikel</h3>';
echo '<ul>';
while ( $related_query->have_posts() ) {
$related_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
wp_reset_postdata();
} ?>
Sehr interessant. Auch im Hinblick darauf, dass man aus Gewohnheit viel zu viele Plgins nutzt.
Danke für den guten Tipp. Es ist sehr nutzbar
Vielen Dank für deine Hilfe! Leider erhalte ich dann immer noch den Fehler Fatal error.
(Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in /www/htdocs … )
Die Vergleichszeichen (größer/kleiner-als-Zeichen)habe ich selbstverständlich geändert.
„WTF“ wie wahr.
Im übrigen, die Plugin-Lösung (YARPP) funktioniert tadellos.
Sorry, funktioniert doch. Ich habe dieses mal vergessen ‚TAXONOMYNAME’zu ändern.
Vielen Dank nochmals Robert!
Bitte, gerne.
WTF
echo '[a href="' . get_permalink() . '"]' . get_the_title() . '[/a]'
musst die [] durch ersetzen.
Mist, hat den Code nicht richtig übernommen, noch mal:
echo 'Themenrelevante Artikel';
echo '';
while ( $related_query->have_posts() ) {
$related_query->the_post();
echo '' . get_the_title() . '';
}
echo '';
Hallo, ich habe das Snippet in die single.php eingefügt und es werden auch weitere Posts angezeigt, jedoch enthalten diese keinen Links zu den Beiträgen. Was kann ich da machen?
Z.b. mit der Funktion
the_permalink()
…Hallo Robert, danke für den Hinweis. Da ich mich damit nicht auskenne, habe ich mich nun Stundenlang durchgelesen und ausprobiert. Leider erhalte ich immer Fehlermeldungen wie Parse error oder Fatal error. Wie trage ich die Funktion nun korrekt ein?
Versuche mal das hier:
echo ‚Themenrelevante Artikel‘;
echo “;
while ( $related_query->have_posts() ) {
$related_query->the_post();
echo ‚‚ . get_the_title() . ‚‚;
}
echo “;
Hi, danke für diesen hilfreichen Tipp. Ich würde darüber hinaus gerne wissen:
Kann ich statt der Kategorie ODER Tag als
'TAXONOMYNAME'
auch einfach ein Array angeben? Also'taxonomy' => array( 'category', 'post_tag' ),
?Ist es auf einfachem Wege möglich, die Ergebnisse nach der Anzahl der Übereinstimmungen zu sortieren und entsprechend auszugeben?