patric-boehner
4/28/2016 - 11:24 AM

Related Posts Genesis. Requires CSS: https://gist.github.com/carasmo/42324283583bc754ddb28daa8546522f

<?php
//don't add if you're putting this at the END of your functions.php file. 


/**
 *
 * Output related posts with thumbnail
 *
 * @author Nick the Geek / Andrea Whitmer / Chinmoy Paul / Sridhar Katakam / Christina Arasmo
 * @link http://designsbynickthegeek.com/tutorials/related-posts-genesis
 * @link https://sridharkatakam.com/related-posts-with-thumbnails-in-genesis-reloaded/
 * @global object $post
 *
 * Removed title attribute
 * https://mrwweb.com/the-title-attribute-and-why-its-almost-useless/
 * https://silktide.com/i-thought-title-text-improved-accessibility-i-was-wrong/
 *
 * Uses a background image
 *
 */
  
add_action( 'genesis_entry_footer', 'your_prefix_related_posts', 12 );
 
function your_prefix_related_posts() {

	global $do_not_duplicate;

	if ( ! is_singular ( 'post' ) ) {
		return;
	}

  	global $related_image_size; 
  	
	$related_image_size = 'thumbnail-400x225-cc'; //* ===== put your 16:9 image size slug here
	
	$count = 0;

	$related = '';

	$do_not_duplicate = array();

	$tags = wp_get_post_tags( get_the_ID() );

	$cats = wp_get_post_categories( get_the_ID() );

	//* If we have some tags, run the tag query.
	if ( $tags ) {
		$query    = your_prefix_related_tag_query( $tags, $count ); //* ===== change your_prefix here too
		$related .= $query[ 'related' ];
		$count    = $query[ 'count' ];
	}

	//* If we have some categories and less than 6 posts, run the cat query.
	if ( $cats && $count <= 5 ) {
		$query    = your_prefix_related_cat_query( $cats, $count ); //* ===== and change your_prefix here too
		$related .= $query[ 'related' ];
		$count    = $query[ 'count'] ;
	}

	//* End here if we don't have any related posts.
	if ( ! $related ) {
		return;
	}

	//* Display the related posts section.
	echo '<div class="related-posts">';
		echo '<h3>' . __( 'You may also enjoy ...', 'your-text-domain' ) . '</h3>'; //* === change it your text-domain
		echo '<ul>' . $related . '</ul>';
	echo '</div>';

}

function your_prefix_related_tag_query( $tags, $count ) {

	global $do_not_duplicate;

	if ( ! $tags ) {
		return;
	}

	$postIDs = array( get_the_ID() );

	foreach ( $tags as $tag ) {
		$tagID[] = $tag->term_id;
	}

	$tax_query = array(
		array(
			'taxonomy'  => 'post_format',
			'field'     => 'slug',
			'terms'     => array(
				'post-format-link',
				'post-format-status',
				'post-format-aside',
				'post-format-quote'
				),
			'operator' => 'NOT IN'
		)
	);
	$args = array(
		'tag__in'               => $tagID,
		'post__not_in'          => $postIDs,
		'showposts'             => 6,
		'ignore_sticky_posts'   => 1,
		'tax_query'             => $tax_query,
	);

	$related  = '';

	$tag_query = new WP_Query( $args );

	if ( $tag_query->have_posts() ) {
		while ( $tag_query->have_posts() ) {
			$tag_query->the_post();

			$do_not_duplicate[] = get_the_ID();

			$count++;

			$title = get_the_title();

			$related .= '<li>';
						
			if ( has_post_thumbnail() ) {
			
  				global $related_image_size; 
		    	
		    	$image = wp_get_attachment_image_src( get_post_thumbnail_id(), $related_image_size );
				
				$related .= '<a style="background-image:url( ' . $image[0] . ' );" class="related-image" href="' . get_permalink() . '" rel="bookmark"></a>';
			
			} else {
			
				$related .= '<a class="related-fallback" href="' . get_permalink() . '" rel="bookmark"></a>';
			}
			
			$related .= '<h6 class="entry-title"><a href="' . get_permalink() . '" rel="bookmark">' . $title . '</a></h6>';
			$related .= '</li>';
		}
	}

	wp_reset_postdata();

	$output = array(
		'related' => $related,
		'count'   => $count
	);

	return $output;
}

function your_prefix_related_cat_query( $cats, $count ) {

	global $do_not_duplicate;

	if ( ! $cats ) {
		return;
	}

	$postIDs = array_merge( array( get_the_ID() ), $do_not_duplicate );

	$catIDs = array();

	foreach ( $cats as $cat ) {
		if ( 3 == $cat ) {
			continue;
		}
		$catIDs[] = $cat;
	}

	$showposts = 5 - $count;

	$tax_query = array(
		array(
			'taxonomy'  => 'post_format',
			'field'     => 'slug',
			'terms'     => array(
				'post-format-link',
				'post-format-status',
				'post-format-aside',
				'post-format-quote'
				),
			'operator' => 'NOT IN'
		)
	);
	$args = array(
		'category__in'          => $catIDs,
		'post__not_in'          => $postIDs,
		'showposts'             => $showposts,
		'ignore_sticky_posts'   => 1,
		'orderby'               => 'rand',
		'tax_query'             => $tax_query,
	);

	$related  = '';

	$cat_query = new WP_Query( $args );

	if ( $cat_query->have_posts() ) {
		while ( $cat_query->have_posts() ) {
			$cat_query->the_post();

			$count++;

			$title = get_the_title();

			$related .= '<li>';

			if ( has_post_thumbnail() ) {
			
  				global $related_image_size; 
		    	
		    	$image = wp_get_attachment_image_src( get_post_thumbnail_id(), $related_image_size );
				
				$related .= '<a style="background-image:url( ' . $image[0] . ' );" class="related-image" href="' . get_permalink() . '" rel="bookmark"></a>';
			
			} else {
			
				$related .= '<a class="related-fallback" href="' . get_permalink() . '" rel="bookmark"></a>';
			}
			
			$related .= '<h6 class="entry-title"><a href="' . get_permalink() . '" rel="bookmark">' . $title . '</a></h6>';
			$related .= '</li>';
		}
	}

	wp_reset_postdata();

	$output = array(
		'related' => $related,
		'count'   => $count
	);

	return $output;

}