beans_posts_pagination

Echo posts pagination.

beans_posts_pagination( )

Return: (void)

Source

function beans_posts_pagination() {

	/**
	 * Filter whether {@see beans_posts_pagination()} should be short-circuit or not.
	 *
	 * @since 1.0.0
	 *
	 * @param bool $pre True to short-circuit, False to let the function run.
	 */
	if ( apply_filters( 'beans_pre_post_pagination', is_singular() ) ) {
		return;
	}

	global $wp_query;

	if ( $wp_query->max_num_pages <= 1 ) {
		return;
	}

	$current = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
	$count = intval( $wp_query->max_num_pages );

	beans_open_markup_e( 'beans_posts_pagination', 'ul', array(
		'class' => 'uk-pagination uk-grid-margin',
		'role'  => 'navigation',
	) );

		// Previous.
		if ( get_previous_posts_link() ) {

			beans_open_markup_e( 'beans_posts_pagination_item[_previous]', 'li' );

				beans_open_markup_e( 'beans_previous_link[_posts_pagination]', 'a', array(
					'href' => previous_posts( false ), // Automatically escaped.
				), $current );

					beans_open_markup_e( 'beans_previous_icon[_posts_pagination]', 'i', array(
						'class' => 'uk-icon-angle-double-left uk-margin-small-right',
					) );

					beans_close_markup_e( 'beans_previous_icon[_posts_pagination]', 'i' );

					beans_output_e( 'beans_previous_text[_posts_pagination]', __( 'Previous', 'tm-beans' ) );

				beans_close_markup_e( 'beans_previous_link[_posts_pagination]', 'a' );

			beans_close_markup_e( 'beans_posts_pagination_item[_previous]', 'li' );

		}

		// Links.
		foreach ( range( 1, $wp_query->max_num_pages ) as $link ) {

			// Skip if next is set.
			if ( isset( $next ) && $link != $next ) {
				continue;
			} else {
				$next = $link + 1;
			}

			$is_separator = array(
				1 != $link, // Not first.
				1 == $current && 3 == $link ? false : true, // Force first 3 items.
				$count > 3, // More.
				$count != $link, // Not last.
				( $current - 1 ) != $link, // Not previous.
				$current != $link, // Not current.
				( $current + 1 ) != $link, // Not next.
			);

			// Separator.
			if ( ! in_array( false, $is_separator ) ) {

				beans_open_markup_e( 'beans_posts_pagination_item[_separator]', 'li' );

					beans_output_e( 'beans_posts_pagination_item_separator_text', '...' );

				beans_close_markup_e( 'beans_posts_pagination_item[_separator]', 'li' );

				// Jump.
				if ( $link < $current ) {
					$next = $current - 1;
				} elseif ( $link > $current ) {
					$next = $count;
				}

				continue;

			}

			// Integer.
			if ( $link == $current ) {

				beans_open_markup_e( 'beans_posts_pagination_item[_active]', 'li', array( 'class' => 'uk-active' ) );

					beans_open_markup_e( 'beans_posts_pagination_item[_active]_wrap', 'span' );

						beans_output_e( 'beans_posts_pagination_item[_active]_text', $link );

					beans_close_markup_e( 'beans_posts_pagination_item[_active]_wrap', 'span' );

				beans_close_markup_e( 'beans_posts_pagination_item[_active]', 'li' );

			} else {

				beans_open_markup_e( 'beans_posts_pagination_item', 'li' );

					beans_open_markup_e( 'beans_posts_pagination_item_link', 'a', array(
						'href' => get_pagenum_link( $link ), // Automatically escaped.
					), $link );

						beans_output_e( 'beans_posts_pagination_item_link_text', $link );

					beans_close_markup_e( 'beans_posts_pagination_item_link', 'a' );

				beans_close_markup_e( 'beans_posts_pagination_item', 'li' );

			}
		}

		// Next.
		if ( get_next_posts_link() ) {

			beans_open_markup_e( 'beans_posts_pagination_item[_next]', 'li' );

				beans_open_markup_e( 'beans_next_link[_posts_pagination]', 'a', array(
					'href' => next_posts( $count, false ), // Automatically escaped.
				), $current );

					beans_output_e( 'beans_next_text[_posts_pagination]', __( 'Next', 'tm-beans' ) );

					beans_open_markup_e( 'beans_next_icon[_posts_pagination]', 'i', array(
						'class' => 'uk-icon-angle-double-right uk-margin-small-left',
					) );

					beans_close_markup_e( 'beans_next_icon[_posts_pagination]', 'i' );

				beans_close_markup_e( 'beans_next_link[_posts_pagination]', 'a' );

			beans_close_markup_e( 'beans_posts_pagination_item[_next]', 'li' );

		}

	beans_close_markup_e( 'beans_posts_pagination', 'ul' );

}