Paged posts – how to use numbers and next/previous links?

I want wp_link_pages (mutli-page posts) to display the page numbers, the word “previous” before those numbers, and a “next” after those numbers. It would look like this:

Prev 1, 2, 3, 4 Next

I’m attempting to do this without a plugin. Here’s what I’ve tried so far, but it isn’t working, it is only displaying numbers.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

6

The function you’re using, wp_link_pages­Codex, does not have the feature you’re looking for by default.

However you can easily extend it by using a callback function, registered as a filter on that functions arguments:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

The filter will then modify the parameters that are used in that function on-the-fly and inject the missing links to the prev and next arguments which are output on the left and right side of the numbered link list (next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if ($args['next_or_number'] !== 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if ($page - 1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page < $numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Usage:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

If your theme always uses the prev and next links, then you could change the function a little to make it the default behaviour whenever number (the default) is used, so you need to write less in your themes.

This is a slightly different implementation as suggested by Velvet Blues.

Leave a Comment