The formatted output of a list of pages.
Description
Displays page links for paginated posts (i.e. including the <!--nextpage-->
Quicktag one or more times). This tag must be within The Loop.
Parameters
$args
string|arrayoptional- Array or string of default arguments.
before
stringHTML or text to prepend to each link. Default is<p> Pages:
.after
stringHTML or text to append to each link. Default is</p>
.link_before
stringHTML or text to prepend to each link, inside the<a>
tag.
Also prepended to the current item, which is not linked.link_after
stringHTML or text to append to each Pages link inside the<a>
tag.
Also appended to the current item, which is not linked.aria_current
stringThe value for the aria-current attribute. Possible values are'page'
,'step'
,'location'
,'date'
,'time'
,'true'
,'false'
. Default is'page'
.next_or_number
stringIndicates whether page numbers should be used. Valid values are number and next. Default is'number'
.separator
stringText between pagination links. Default is ‘ ‘.nextpagelink
stringLink text for the next page link, if available. Default is ‘Next Page’.previouspagelink
stringLink text for the previous page link, if available. Default is ‘Previous Page’.pagelink
stringFormat string for page numbers. The % in the parameter string will be replaced with the page number, so ‘Page %’ generates "Page 1", "Page 2", etc.
Defaults to'%'
, just the page number.echo
int|boolWhether to echo or not. Accepts1|true
or0|false
. Default1|true
.
Default:
''
Source
function wp_link_pages( $args = '' ) {
global $page, $numpages, $multipage, $more;
$defaults = array(
'before' => '<p class="post-nav-links">' . __( 'Pages:' ),
'after' => '</p>',
'link_before' => '',
'link_after' => '',
'aria_current' => 'page',
'next_or_number' => 'number',
'separator' => ' ',
'nextpagelink' => __( 'Next page' ),
'previouspagelink' => __( 'Previous page' ),
'pagelink' => '%',
'echo' => 1,
);
$parsed_args = wp_parse_args( $args, $defaults );
/**
* Filters the arguments used in retrieving page links for paginated posts.
*
* @since 3.0.0
*
* @param array $parsed_args An array of page link arguments. See wp_link_pages()
* for information on accepted arguments.
*/
$parsed_args = apply_filters( 'wp_link_pages_args', $parsed_args );
$output = '';
if ( $multipage ) {
if ( 'number' === $parsed_args['next_or_number'] ) {
$output .= $parsed_args['before'];
for ( $i = 1; $i <= $numpages; $i++ ) {
$link = $parsed_args['link_before'] . str_replace( '%', $i, $parsed_args['pagelink'] ) . $parsed_args['link_after'];
if ( $i !== $page || ! $more && 1 === $page ) {
$link = _wp_link_page( $i ) . $link . '</a>';
} elseif ( $i === $page ) {
$link = '<span class="post-page-numbers current" aria-current="' . esc_attr( $parsed_args['aria_current'] ) . '">' . $link . '</span>';
}
/**
* Filters the HTML output of individual page number links.
*
* @since 3.6.0
*
* @param string $link The page number HTML output.
* @param int $i Page number for paginated posts' page links.
*/
$link = apply_filters( 'wp_link_pages_link', $link, $i );
// Use the custom links separator beginning with the second link.
$output .= ( 1 === $i ) ? ' ' : $parsed_args['separator'];
$output .= $link;
}
$output .= $parsed_args['after'];
} elseif ( $more ) {
$output .= $parsed_args['before'];
$prev = $page - 1;
if ( $prev > 0 ) {
$link = _wp_link_page( $prev ) . $parsed_args['link_before'] . $parsed_args['previouspagelink'] . $parsed_args['link_after'] . '</a>';
/** This filter is documented in wp-includes/post-template.php */
$output .= apply_filters( 'wp_link_pages_link', $link, $prev );
}
$next = $page + 1;
if ( $next <= $numpages ) {
if ( $prev ) {
$output .= $parsed_args['separator'];
}
$link = _wp_link_page( $next ) . $parsed_args['link_before'] . $parsed_args['nextpagelink'] . $parsed_args['link_after'] . '</a>';
/** This filter is documented in wp-includes/post-template.php */
$output .= apply_filters( 'wp_link_pages_link', $link, $next );
}
$output .= $parsed_args['after'];
}
}
/**
* Filters the HTML output of page links for paginated posts.
*
* @since 3.6.0
*
* @param string $output HTML output of paginated posts' page links.
* @param array|string $args An array or query string of arguments. See wp_link_pages()
* for information on accepted arguments.
*/
$html = apply_filters( 'wp_link_pages', $output, $args );
if ( $parsed_args['echo'] ) {
echo $html;
}
return $html;
}
Hooks
- apply_filters( ‘wp_link_pages’,
string $output ,array|string $args ) Filters the HTML output of page links for paginated posts.
- apply_filters( ‘wp_link_pages_args’,
array $parsed_args ) Filters the arguments used in retrieving page links for paginated posts.
- apply_filters( ‘wp_link_pages_link’,
string $link ,int $i ) Filters the HTML output of individual page number links.
Use previous/next option (instead of page numbers); customize text, HTML, and classes:
The above displays on the page as this:
More pages: « Previous | Next »
(“Previous” and “Next” links will not print if on the first or last pages, respectively.)
Example:
If the content of a page (or post) has at least one
<!--nextpage-->
tag (and this code is in The Loop), this prints linked page numbers (“Pages: 1 2 3”), without a link on current page number, and by default within<p>
tags:Display page-links within other HTML tags:
Prints page links as list items within an unordered list, and with custom class names:
Migrated from Codex:
Default Usage
Displays page-links by default with paragraph tags before and after, using Next page and Previous page, listing them with page numbers as Page 1, Page 2 and so on.
Migrated from Codex:
Page-links in Paragraph Tags
Migrated from Codex:
Page-links in DIV
Displays page-links in DIV for CSS reference as
.
Migrated from Codex:
Adding wp_link_pages in content.php
This code snippet can be added directly to your content.php or single.php file in the position you want your pagination to display.
For fully customized single post pagination
« Previous 1 2 3 Next »
Simple hack for that can be search and replace for example
or
to wrap all page numbers and current page number inside a list-item tag