Created
September 29, 2015 21:19
-
-
Save braddalton/24ce43a9d8fba62c2dc3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Echo archive pagination in page numbers format. | |
* | |
* Applies the `genesis_prev_link_text` and `genesis_next_link_text` filters. | |
* | |
* The links, if needed, are ordered as: | |
* | |
* * previous page arrow, | |
* * first page, | |
* * up to two pages before current page, | |
* * current page, | |
* * up to two pages after the current page, | |
* * last page, | |
* * next page arrow. | |
* | |
* @since 0.2.3 | |
* | |
* @global WP_Query $wp_query Query object. | |
* | |
* @return null Return early if on a single post or page, or only one page present. | |
*/ | |
function genesis_numeric_posts_nav() { | |
if( is_singular() ) | |
return; | |
global $wp_query; | |
//* Stop execution if there's only 1 page | |
if( $wp_query->max_num_pages <= 1 ) | |
return; | |
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1; | |
$max = intval( $wp_query->max_num_pages ); | |
//* Add current page to the array | |
if ( $paged >= 1 ) | |
$links[] = $paged; | |
//* Add the pages around the current page to the array | |
if ( $paged >= 3 ) { | |
$links[] = $paged - 1; | |
$links[] = $paged - 2; | |
} | |
if ( ( $paged + 2 ) <= $max ) { | |
$links[] = $paged + 2; | |
$links[] = $paged + 1; | |
} | |
genesis_markup( array( | |
'html5' => '<div %s>', | |
'xhtml' => '<div class="navigation">', | |
'context' => 'archive-pagination', | |
) ); | |
$before_number = genesis_a11y() ? '<span class="screen-reader-text">' . __( 'Page ', 'genesis' ) . '</span>' : ''; | |
echo '<ul>'; | |
//* Previous Post Link | |
if ( get_previous_posts_link() ) | |
printf( '<li class="pagination-previous">%s</li>' . "\n", get_previous_posts_link( apply_filters( 'genesis_prev_link_text', '« ' . __( 'Previous Page', 'genesis' ) ) ) ); | |
//* Link to first page, plus ellipses if necessary | |
if ( ! in_array( 1, $links ) ) { | |
$class = 1 == $paged ? ' class="active"' : ''; | |
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( 1 ) ), $before_number . '1' ); | |
if ( ! in_array( 2, $links ) ) | |
echo '<li class="pagination-omission">…</li>'; | |
} | |
//* Link to current page, plus 2 pages in either direction if necessary | |
sort( $links ); | |
foreach ( (array) $links as $link ) { | |
$class = $paged == $link ? ' class="active" aria-label="' . __( 'Current page', 'genesis' ) . '"' : ''; | |
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $link ) ), $before_number . $link ); | |
} | |
//* Link to last page, plus ellipses if necessary | |
if ( ! in_array( $max, $links ) ) { | |
if ( ! in_array( $max - 1, $links ) ) | |
echo '<li class="pagination-omission">…</li>' . "\n"; | |
$class = $paged == $max ? ' class="active"' : ''; | |
printf( '<li%s><a href="%s">%s</a></li>' . "\n", $class, esc_url( get_pagenum_link( $max ) ), $before_number . $max ); | |
} | |
//* Next Post Link | |
if ( get_next_posts_link() ) | |
printf( '<li class="pagination-next">%s</li>' . "\n", get_next_posts_link( apply_filters( 'genesis_next_link_text', __( 'Next Page', 'genesis' ) . ' »' ) ) ); | |
echo '</ul></div>' . "\n"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment