<?php /** * Pagination layout * * @package understrap */ // Exit if accessed directly. defined( 'ABSPATH' ) || exit; if ( ! function_exists( 'understrap_pagination' ) ) { /** * Displays the navigation to next/previous set of posts. * * @param string|array $args { * (Optional) Array of arguments for generating paginated links for archives. * * @type string $base Base of the paginated url. Default empty. * @type string $format Format for the pagination structure. Default empty. * @type int $total The total amount of pages. Default is the value WP_Query's * `max_num_pages` or 1. * @type int $current The current page number. Default is 'paged' query var or 1. * @type string $aria_current The value for the aria-current attribute. Possible values are 'page', * 'step', 'location', 'date', 'time', 'true', 'false'. Default is 'page'. * @type bool $show_all Whether to show all pages. Default false. * @type int $end_size How many numbers on either the start and the end list edges. * Default 1. * @type int $mid_size How many numbers to either side of the current pages. Default 2. * @type bool $prev_next Whether to include the previous and next links in the list. Default true. * @type bool $prev_text The previous page text. Default '«'. * @type bool $next_text The next page text. Default '»'. * @type string $type Controls format of the returned value. Possible values are 'plain', * 'array' and 'list'. Default is 'array'. * @type array $add_args An array of query args to add. Default false. * @type string $add_fragment A string to append to each link. Default empty. * @type string $before_page_number A string to appear before the page number. Default empty. * @type string $after_page_number A string to append after the page number. Default empty. * @type string $screen_reader_text Screen reader text for the nav element. Default 'Posts navigation'. * } * @param string $class (Optional) Classes to be added to the <ul> element. Default 'pagination'. */ function understrap_pagination( $args = array(), $class = 'pagination' ) { if ( ! isset( $args['total'] ) && $GLOBALS['wp_query']->max_num_pages <= 1 ) { return; } $args = wp_parse_args( $args, array( 'mid_size' => 2, 'prev_next' => true, 'prev_text' => __( '«', 'understrap' ), 'next_text' => __( '»', 'understrap' ), 'type' => 'array', 'current' => max( 1, get_query_var( 'paged' ) ), 'screen_reader_text' => __( 'Posts navigation', 'understrap' ), ) ); $links = paginate_links( $args ); if ( ! $links ) { return; } ?> <nav aria-labelledby="posts-nav-label"> <h2 id="posts-nav-label" class="sr-only"> <?php echo esc_html( $args['screen_reader_text'] ); ?> </h2> <ul class="<?php echo esc_attr( $class ); ?>"> <?php foreach ( $links as $key => $link ) { ?> <li class="page-item <?php echo strpos( $link, 'current' ) ? 'active' : ''; ?>"> <?php echo str_replace( 'page-numbers', 'page-link', $link ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </li> <?php } ?> </ul> </nav> <?php } }