WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
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 '11 at 13:28

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.

share|improve this answer
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 '11 at 16:20

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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