0

I'm looking to create an infinitely looping 'next post' link at the bottom of a post that only links to posts in that category.

So if I have three posts in the same category – 1, 2 and 3 – it should work as follows:

  • clicking the link on post 1 should take me to post 2
  • clicking the link on post 2 should take me to post 3
  • clicking the link on post 3 should take me to post 1

I've got code to loop through all posts in this way, but am stuck on how to edit it so that it only loops through posts with the same category as the current post.

if( get_adjacent_post(true, '', false) ) { 
next_post_link($format = '%link', $link = 'Next Article', $in_same_term = true);
} else { 
$thiscat = get_the_category();
$last = new WP_Query(array('query' => 'posts_per_page=1&order=ASC',
'category_name' => $thiscat)); $last->the_post();
    echo '<a href="' . get_permalink() . '">Next Article</a>';
wp_reset_query();
};
6
  • have you read about the $in_same_term parameter in developer.wordpress.org/reference/functions/next_post_link and using the categories' parameters in WP_Query developer.wordpress.org/reference/classes/wp_query/… and how to get a post's category developer.wordpress.org/reference/functions/get_the_category ? – Michael Apr 13 '20 at 18:12
  • @Michael Thanks a lot for this guidance. Have edited my code in the question but it still doesn't quite seem to be working. what am I getting wrong? – zackwww Apr 13 '20 at 18:58
  • get_the_category() returns an array, even if you only have one coategory in the post; use only the first element: – Michael Apr 13 '20 at 19:23
  • @michael ah yes i'd just got to that myself - still seems to be a dud though! if( get_adjacent_post(true, '', false, 'category') ) { next_post_link($format = '%link', $link = 'Next Article', $in_same_term = true, $taxonomy = 'category'); } else { $thiscat = get_the_category(); $catslug = $thiscat[0]->slug; $last = new WP_Query(array('query' => 'posts_per_page=1&order=ASC', 'category_name' => $catslug)); $last->the_post(); echo '<a href="' . get_permalink() . '">Next Article</a>'; wp_reset_query(); }; – zackwww Apr 13 '20 at 19:24
  • your query parameters are a bit mixed; try: WP_Query( array( 'posts_per_page' => 1, 'order' => ASC, 'category_name' => $catslug ) ) – Michael Apr 13 '20 at 19:31
0

based on the docu:

'infinitely looping 'next post' link at the bottom of a post that only links to posts in that category'

if( get_adjacent_post(true, '', false, 'category') ) {
   next_post_link($format = '%link', $link = 'Next Article', $in_same_term = true, $taxonomy = 'category'); 
} else { 
   $thiscat = get_the_category(); 
   $catslug = $thiscat[0]->slug; 
   $last = new WP_Query( array( 
      'posts_per_page' => 1, 
      'order' => 'ASC', 
      'category_name' => $catslug  
    ) ); 
   $last->the_post(); 
   echo '<a href="' . get_permalink() . '">Next Article</a>'; 
   wp_reset_postdata(); 
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.