Relaterade poster (related posts)
Så här blir resultatet med min funktion för relaterade poster.

Blev lite inspirerad av ett inlägg på WPtuts+ om relaterade poster, så jag var tvungen att göra en egen funktion för detta. Kopiera och klistra in följande kod i din funktionsfil (functions.php).

/**
 *	Show related posts based on common terms
 *	@author: Jon Täng, contact@jontang.se
 *	@version: 1.1
 */
function tng_related_posts() {
	global $post;
	$tax = get_taxonomies();
	$terms = get_the_terms( $post->ID, $tax );

	$excludes = array( $post->ID );
	$posts = array();
	foreach ( $terms as $term ) {
		$rel_posts = get_posts( array( 
			'tax_query' => array(
				array(
					'taxonomy' => $term->taxonomy,
					'field' => 'id',
					'terms' => $term->term_id
				)
			),
			'post__not_in' => $excludes, 
			'orderby' => 'rand', 
			'posts_per_page' => 5 ) );

		if ( !empty($rel_posts) ) {
			foreach ( $rel_posts as $rel_post) {
				$posts[] = $excludes[] = $rel_post->ID;
			}
		}
	}

	$q = new WP_Query( array( 'post__in' => $posts, 'posts_per_page' => 5, 'orderby' => 'rand' ));

	echo '<div class="related-posts"><h4>', __('Related posts', LANG), '</h4>';
	echo '<ul>';
	while ( $q->have_posts() ) : $q->the_post();
		echo '<li><a href="', 
			get_permalink( get_the_ID() ), 
			'">', get_the_title(), '</a></li>';
	endwhile;	
	echo '</ul></div>';	

	wp_reset_query();
}

Sen är det bara att anropa funktionen med följande kodsnutt där man vill visa de relaterade posterna, i filen som visar singelpost (vanligtvis single.php).

<?php tng_related_post(); ?>

Jag har inte provat funktionen i arkiv-listor, så där kan den krångla och behöva lite mer arbete och då får ni gärna meddela mig det här i kommentarsfältet.

Ni ser resultatet i bilden ovan eller här nedan i posten (om du är på bloggposten det vill säga). Testa den och ge mig gärna feedback på funktionen. Gillar ni mitt arbete följ mig gärna på Facebook eller Google+.

2013-05-25 – Uppdatering

Har gjort lite ändringar i koden. Bland annat använt mig av en tax_query istället när jag loopar igenom termerna, samt lagt in en random-parameter i queryn vid hämtning av posterna innan utskrift.

Publicerat av Jon Täng

Arbetar som webbutvecklarereklam- och webbyrån Bozzanova AB i Vänersborg. Dagarna fylls med WordPress, PHP, jQuery, HTML5 och CSS3.

Delta i diskussionen

1 kommentar

Lämna en komentar

E-postadressen publiceras inte. Obligatoriska fält är märkta *