7

I'm on single-work.php for a custom post type called work, inside the loop.

Trying to make two links to the previous and next post.

Using this code:

<?php previous_post_link(); ?>

and

<?php next_post_link(); ?>

But nothing shows up. Am I missing something

Here is my code, very straightforward:

<?php get_header(); ?>
<div class="full" >

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

    <?php next_post_link('%link', 'Next post »'); ?>
<?php next_post_link('%link', 'Next post »'); ?>

<?php endwhile; // end of the loop. ?>

</div><!--/full-->  
<?php get_footer(); ?>

3 Answers 3

4

What I see in your code is that your next post and previous post codes are appearing within the while loop which shouldn't be within the loop and it should appear like this:

<?php get_header(); ?>
<div class="full" >
<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<?php endwhile; // end of the loop. ?>
<?php next_post_link('%link', 'Next post »'); ?>
<?php next_post_link('%link', 'Next post »'); ?>
</div><!--/full-->  
<?php get_footer(); ?>

Or, you can find it in detail here.

In the above post I found numeric pagination but still it have explained how exactly the pagination works, which is in great detail.

1
  • User 39075, please don't undo grammar corrections done by your fellow users. Here, we value good content and editorial quality. Thanks. Check the help center for more details.
    – brasofilo
    Oct 6, 2013 at 13:18
1

Read the documentation.

This function will not work (fail silently) if mysql.trace_mode is enabled in your php.ini. If you can't edit that file, try adding

ini_set( 'mysql.trace_mode', 0 );

to your theme's functions.php.

That might solve your problem, it did for me.

0

The functions are right; set the params

<?php next_post_link('%link', 'Next post »'); ?>

<?php next_post_link('%link', 'Next post »'); ?>

Well, without seeing any of your code, it's hard to say why. Are there any PHP errors or warnings?

Update

A small example

<?php query_posts( array( 'post_type' => 'page', 'post_status' => 'publish' ) ) ?>
<?php if ( have_posts() ) : ?>

    <?php while ( have_posts() ) : the_post() ?>
        <!-- do stuff -->

    <div id="nav-single">
        <div class="left"><?php previous_post_link(); ?></div>
        <div class="right"><?php next_post_link(); ?></div>
    </div>

    <?php endwhile; // end of the loop. ?>
    <?php wp_reset_query(); ?>

<?php else : ?>

    <!-- do other stuff here -->

<?php endif ?>
5
  • Those params are optional, putting them in doesn't help any. No PHP errors or anything which is why I'm having trouble figuring it out, its just silent..
    – wesbos
    Dec 13, 2012 at 20:52
  • Yes, but it works on many single templates in many themes. Is ahrd without the source of the template, that we see, where is the problem. It is also possible, that a plugin or functions hook inside the loop and break the template tags.
    – bueltge
    Dec 13, 2012 at 20:55
  • I'll update with my code...
    – wesbos
    Dec 13, 2012 at 20:57
  • And the CPT is inside the default loop? In your code is a default loop, not several for CPT. But, yes it is possible to hook from a CPT inside the loop and add the CPT.
    – bueltge
    Dec 13, 2012 at 21:08
  • What if I want the previous/next post from the same category? What do I need to do with the code above?
    – Jornes
    Oct 1, 2022 at 4:34

Your Answer

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

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