The situation...I use 3 categories. One of them is called 'News'. This page shows on the left the latest post in the category 'News' and on the left it shows the 10 most recent posts from this same category. And there is the default navigation...« Previous Page — Next Page ».

A single post from the 'News' category looks the same as the 'News' page. On the left is the post and on the right the 10 most recent posts. And the navigation...

This is where the problem is. The navigation button links to:


Where it should link to:


Anyway to work around this problem? How to add next/prev page links to a single.php?

  • Please post some code, how do you expect us to fix a problem when we can't even work out what's causing it?
    – Dunhamzzz
    Sep 7, 2011 at 13:28

1 Answer 1


The short answer:

You can't do what you're trying to do, using the function you're using.

The long answer:

The posts_nav_link() template tag does not return any output on single blog posts. It calls get_posts_nav_link(), which is defined in source as follows:

function get_posts_nav_link( $args = array() ) {
        global $wp_query;

        $return = '';

        if ( !is_singular() ) {
                $defaults = array(
                        'sep' => ' — ',
                        'prelabel' => __('« Previous Page'),
                        'nxtlabel' => __('Next Page »'),
                $args = wp_parse_args( $args, $defaults );

                $max_num_pages = $wp_query->max_num_pages;
                $paged = get_query_var('paged');

                //only have sep if there's both prev and next results
                if ($paged < 2 || $paged >= $max_num_pages) {
                        $args['sep'] = '';

                if ( $max_num_pages > 1 ) {
                        $return = get_previous_posts_link($args['prelabel']);
                        $return .= preg_replace('/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $args['sep']);
                        $return .= get_next_posts_link($args['nxtlabel']);
        return $return;


The important conditional:

if ( !is_singular() )

The is_singular() conditional returns true when the current page is a single blog post, static page, or attachment page. Since you're on a single blog post, the function simply returns an empty string.

  • Ok that's clear. So the navigation is not possible in any way? Any other possiblity? Otherwise I will have to skip it...
    – user8488
    Sep 7, 2011 at 16:20

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.