Ankerlink an den Anfang der Seite
photo by ryan plomp
Generic filters
Filter by Kategorien

Der Beitrag, geschriebem am 6. August 2023, ist schon etwas älter und könnte womöglich nicht mehr aktuell sein

Grundsätzlich bin ich kein großer Fan, ganze Blockfarmen oder Jetpack (erfordert die Verbindung zu einem WordPress.com-Account) zu installieren, nur um an eine bestimmte Funktionalität heranzukommen. Daher beschränkt sich meine Suche zumeist auf ein Plugin mit dem einen Block, der genau die Funktionalität liefert, die gesucht ist.

Die „Klassiker“ in Bezug auf related Posts sind „Yarpp“ – Yet Another Related Posts Plugin und Contextual Related Posts. Ich stellte mir allerdings etwas jüngeres vor, das explizit für die neue Generation WordPress entwickelt wurde.

Shortcodes in Tempates und Patterns werden nicht ausgeführt. Andererseits ist das mit den beiden Plugins gar nicht erforderlich, da sie automatisch für die Anzeige ähnlicher Beiträge am Ende eines Artikels sorgen. Das machen sie auch in FSE Projekten, sodass es gar nicht erforderlich ist, einen Shortcode zu verwenden.

Für kurze Zeit hatte ich „Yarpp“ installiert. Ohne eigenes CSS wäre die Darstellung allerdings nicht akzeptabel gewesen (auf Contextual Related Posts trifft das ebenfalls zu, das Originaldesign erkennt man sofort am nicht gerade zeitgemäßen Layout). Zudem fand ich es immer mal wieder in Listen vulnerabler Plugins in Sicherheitsreports.

Schließlich beschloss ich, auf ein Plugin zu verzichten und zu prüfen, wie weit sich der Abfrage-Loop Block anpassen lässt. Denkbar wäre hier sicherlich auch, eine Block-Variation für Related Posts zu entwickeln. Wer allerdings nach wie vor lieber mit PHP arbeitet, kann sich hier auch eines Filters bedienen.

In Block Themes gibt es zwar keine PHP-Templates mehr. Erlaubt ist hingegen immer noch eine functions.php. Eine ganz einfache Lösung für related Posts kann sein, den Abfrage-Query-Block im Beitragstemplate einzufügen. Die maximale Seitenanzahl kann hierbei auf 1 beschränkt werden.

grafik 1

In der functions.php (oder über ein Code Snippets-Plugin) lassen sich die Query-Parameter mit Hilfe des query_loop_block_query_vars Filters beliebig modifzieren. Wichtig ist hierbei, gleich zu anfang festzustellen, dass man sich auf einer Beitragsseite befindet. Ansonsten soll der Abfrage-Loop (der auf der Blogstartseite, in Archiven etc. zum Einsatz kommt) nicht modifziert werden.

add_filter( 'query_loop_block_query_vars', 'related_posts_filter_query' );
function related_posts_filter_query( $query ) {
    if ( !is_singular('post') ) return $query;
    global $post;
    $taxonomies = get_object_taxonomies( $post, 'names' );

    if ( $taxonomies ) {
	foreach ( $taxonomies as $taxonomy ) {
		$terms = get_the_terms( $post->ID, $taxonomy );
		if ( empty( $terms ) ) {
			continue;
		}
		$term_list  = wp_list_pluck( $terms, 'slug' );
		$query['tax_query'][] = array(
			'taxonomy' => $taxonomy,
			'field'    => 'slug',
			'terms'    => $term_list
		);
	}	
    }
	
    if ( count( $query['tax_query'] ) > 1 ) {
	$query['tax_query']['relation'] = 'OR';
    }
	
    $query['orderby'] = 'rand';
    $query['post__not_in'] = [$post->ID];

    return $query;
}

Bitte das Kommentarfeld nicht für Supportanfragen nutzen; hier kann kein Support angeboten werden. Die Angabe von Name oder E-Mail-Adresse ist optional, ein Spitzname wäre trotzdem nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Name und E-Mail-Adresse (beides optional, da alle Kommentare moderiert werden) werden dauerhaft gespeichert. Über dieses Formular kann jeder Zeit die Löschung persönlicher Daten oder Kommentare angefordert werden; die Anfrage wird nicht veröffentlicht und nach der Bearbeitung gelöscht. IP-Adressen, die mit Kommentaren gespeichert werden, werden nach zwei Monaten automatisch gelöscht.

Ihre Nachricht wird möglicherweise zur Spam-Prüfung an OpenAI (USA) weitergeleitet. Weitere Informationen finden Sie in unserer Datenschutzerklärung.