Quantcast
Channel: WordPress › Support » Forum: Hacks - Recent Topics
Viewing all articles
Browse latest Browse all 8245

kesp on "Exclude posts from first loop in second loop"

$
0
0

Hi,

I've created a related posts function for the end of my single.php that has 2 loops. The first loop displays related posts by tag and then if there's not enough of those then the second loop kicks in and displays some recent posts from the same category.

The idea is that i always want to show 4 related posts but i haven't always got enough related by tag so when that happens i display a few from the same category to pad it out.

Both loops exclude the current post id, however, the problem i have is that it is possible for a post to be returned in the first tag loop and the second by-category loop, so i end up with 2 of the same in the related posts

What I want to do is exclude any posts returned in the first by-tag loop from the second by-category loop.

I've been trying to implement something this solution but not much luck

http://stackoverflow.com/questions/12539952/two-loops-exclude-post-from-first-loop-in-second-loop

Here's my code:

<?php
        $orig_post = $post;
        global $post;
        $tags = wp_get_post_tags($post->ID);
         $max_articles = 4;  // How many articles to display
		 $cnt = 0;

        if ($tags) {
       	 $tag_ids = array();
       	 foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
       	 $args=array(
        'tag__in' => $tag_ids,
        'post__not_in' => array($post->ID),
        'posts_per_page'=> $max_articles, // Number of related posts to display.
        'caller_get_posts'=>1 ,
		'tag__not_in' => array('480'),
		'orderby' => 'date',
		'order' => 'DESC'

        );  

        $my_query = new wp_query( $args );
	$exclude_featured = array();

        while( $my_query->have_posts() ) {
        $my_query->the_post();
		$cnt++;
		$exclude_featured = $post->ID;

        ?> <?php the_title(); ?>  	

        <? }
        }
        $post = $orig_post;  

         if ($cnt < $max_articles) {
		 			 $args=array(
		'category_name' => $category[0]->cat_name,
        'post__not_in' =>  array($post->ID),
        'caller_get_posts'=>1
        );  

				 			 $blah=array(
        'post__not_in' =>  array($exclude_featured)
        );
       $mergeblah = array_merge( $args, $blah );
        $relQuery = new WP_query( $mergeblah );  

		if($relQuery->have_posts()) : 

		while($relQuery->have_posts()) : $relQuery->the_post();
		            $cnt++;
                if ($cnt > $max_articles) break;
		?>
		        <?php the_title(); ?>
		<?php
		endwhile;

		else :
			//do nothing
		endif;

		 }
		wp_reset_postdata();
        ?>

Any pointers much appreciated.

Thanks,

Kes


Viewing all articles
Browse latest Browse all 8245

Trending Articles