Jon Täng

Visa relaterade poster efter ditt blogginlägg

19 maj, 2013
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.

Lämna ett svar

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

One comment on “Visa relaterade poster efter ditt blogginlägg”

linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram