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'
)); ?>
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.