0

I have a question regarding this code. When the last entry appears in then "next" I show the same page all the time. In addition, I would like to add a thumbnail display of the next post and a title to this. Is it possible?

<?php
    if( get_adjacent_post(false, '', true) ) {
            previous_post_link('%link' , '%title', '&larr; ');
        } else {
            $first = new WP_Query('cat=3&posts_per_page=1&order=DESC'); $first->the_post();
             echo '<a href="' . get_permalink() . '">&larr;</a>';
             echo ('%title');
            wp_reset_query();
        };

        if( get_adjacent_post(false, '', false) ) {

        } else {
            $last = new WP_Query('cat=3&posts_per_page=1&order=ASC'); $last->the_post();
                echo '<a href="' . get_permalink() . '">Next Post &rarr;</a>';
            wp_reset_query();
        };

    ?>

Please help, gentlemen and ladies

1 Answer 1

0

I think this is a better and cleaner approach of what you are trying to achive.

// get_adjacent_post will return $post object
$prev_post = get_adjacent_post(true,'',true);
//Using get_the_post_thumbnail() to get featured image of previous post
$prev_thumbnail = get_the_post_thumbnail( $prev_post->ID, array( 100, 100));

$next_post = get_adjacent_post(true,'',false);
//Using get_the_post_thumbnail() to get featured image of next post
$next_thumbnail = get_the_post_thumbnail( $next_post->ID, array( 100, 100));

the_post_navigation(
    array(
        'in_same_term' => true,
        'next_text' => '<p class="meta-nav">'. $next_thumbnail .'Next Post &rarr;</p><p class="post-title">%title</p>',
        'prev_text' => '<p class="meta-nav">'. $prev_thumbnail .'&larr; Previous Post</p><p class="post-title">%title</p>',
    )
);

Okay the solution above will require additional next_post_link filter and prev_post_link filter and overriding the_post_navigation template which is not a realy good solution. So based on your code try this one. I have tested 3 posts from same category and its looping without problems.

$prev_post = get_adjacent_post(true,'',true);
if($prev_post):
    $prev_post_id = $prev_post->ID;
    $prev_thumbnail = get_the_post_thumbnail($prev_post_id, array( 100, 100));
else:
    $abjacent_categories = get_the_category(); 
    $ids = array();
    foreach($abjacent_categories as $category) {
        $ids[] = $category->term_id;
    }
    $last = new WP_Query( array( 
        'post_type' => 'post',
        'posts_per_page' => 1, 
        'orderby'         => 'post_date',
        'order'           => 'DESC',
        'category__in' => $ids, 
/* use category__and if you want post to be in all categories as current post. 
For now its happy with one of current post categories. 
Depending on this will give different results at the end so keep that in mind. */
     ) ); 
    $last->the_post(); 
    $prev_post_id = get_the_ID();
    $prev_thumbnail = get_the_post_thumbnail( $prev_post_id, array( 100, 100));
wp_reset_query();
endif;

$next_post = get_adjacent_post(true,'',false);
if($next_post):
    $next_post_id = $next_post->ID;
    $next_thumbnail = get_the_post_thumbnail($next_post_id, array( 100, 100));
else:
    $abjacent_categories = get_the_category(); 
    $ids = array();
    foreach($abjacent_categories as $category) {
        $ids[] = $category->term_id;
    }
    $first = new WP_Query( array( 
        'post_type' => 'post',
        'posts_per_page' => 1, 
        'orderby'         => 'post_date',
        'order'           => 'ASC',
        'category__in' => $ids,     
/* use category__and if you want post to be in all categories as current post. 
For now its happy with one of current post categories. 
Depending on this will give different results at the end so keep that in mind. */
     ) ); 
    $first->the_post(); 
    $next_post_id = get_the_ID();
    $next_thumbnail = get_the_post_thumbnail( $next_post_id, array( 100, 100));
wp_reset_query();
endif;

For the html you can test with following template

<div class="nav-links">
    <div class="nav-previous">
        <a href="<?php echo get_the_permalink($prev_post_id); ?>" rel="prev">
            <p class="meta-nav"><?php echo $prev_thumbnail ?> &larr; Previous Post</p><p class="post-title"><?php echo get_the_title($prev_post_id); ?></p>
        </a>
    </div>
    <div class="nav-next">
        <a href="<?php echo get_the_permalink($next_post_id); ?>" rel="next">
            <p class="meta-nav"><?php echo $next_thumbnail ?> Next Post &rarr;</p><p class="post-title"><?php echo get_the_title($next_post_id); ?></p>
        </a>
    </div>
</div>
5
  • Your code works very well. The only problem is that the last post "next-post" already disappears ... And I would like the button to stay and start all over again.
    – GGQa
    Commented Aug 27, 2021 at 9:47
  • Martin. I can only click on the previous or next one and then all the time after clicking, it stays on the same post...
    – GGQa
    Commented Aug 27, 2021 at 13:03
  • Ive forgot to reset the query and one typo mistake. Check it now Commented Aug 27, 2021 at 13:29
  • GG. Thanks Martin. It works great!
    – GGQa
    Commented Aug 27, 2021 at 13:51
  • I can't rate UP your answer, cause IM 13 reputation :P Next time ;)
    – GGQa
    Commented Aug 27, 2021 at 13:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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