• Skip to main content
  • Skip to forum navigation

StudioPress

  • Shop for Themes
  • My StudioPress

Forum navigation

  • Home
  • General Genesis Discussions
  • StudioPress Themes
  • Genesis Blocks
    • Genesis Blocks
    • Genesis Custom Blocks
  • Retired Themes
  • FAQs
  • Forum Rules
  • Internationalization and Translations
  • Forum Bugs and Suggestions
  • Forum Log In

Are You Using The WordPress Block Editor?

Genesis now offers plugins that help you build better sites faster with the WordPress block editor (Gutenberg). Try the feature-rich free versions of each plugin for yourself!

Genesis Blocks Genesis Custom Blocks

Function to modify numbered pagination

Welcome!

These forums are for general discussion on WordPress and Genesis. Official support for StudioPress themes is offered exclusively at My StudioPress. Responses in this forum are not guaranteed. Please note that this forum will require a new username, separate from the one used for My.StudioPress.

Log In
Register Lost Password

Community Forums › Forums › Archived Forums › Design Tips and Tricks › Function to modify numbered pagination

This topic is: not resolved

Tagged: archive pagination, pagination

  • This topic has 20 replies, 3 voices, and was last updated 7 years, 12 months ago by Carla the Moose.
Viewing 21 post (of 21 total)
← 1 2
  • Author
    Posts
  • October 1, 2015 at 2:40 pm #167178
    Carla the Moose
    Member

    Sure, but be forewarned: These are changes I made directly to a Genesis file. NOT a good idea. When I have some time, I'm going to write a proper function for my child theme.

    Thanks to Brad's guidance, I found the code in genesis/lib/structure/post.php. Here it is. Copy this to a text editor, and then open a blank document and copy the original post.php contents and save it.

    Search for XXX and you'll see what I did. There are six of them. The first marks the beginning of the section where you'll find the code. This is just that section. I only wanted numbers to display, so I also removed the previous/next text links, including the invisible but present anchor link.

    ETA: For the $paged code, where you see XXX is the line I removed to limit the numbered links to display only one on either side of the active link. I hope that makes sense. Just compare with the original code and you'll see what I removed.

    add_action( 'genesis_after_endwhile', 'genesis_posts_nav' );
    /** XXX
     * Conditionally echo archive pagination in a format dependent on chosen setting.
     *
     * This is shown at the end of archives to get to another page of entries.
     *
     * @since 0.2.3
     *
     * @uses genesis_get_option()            Get theme setting value.
     * @uses genesis_prev_next_posts_nav()   Prev and Next links.
     * @uses genesis_numeric_posts_nav()     Numbered links.
     */
    function genesis_posts_nav() {
    
    	if ( 'numeric' === genesis_get_option( 'posts_nav' ) )
    		genesis_numeric_posts_nav();
    	else
    		genesis_prev_next_posts_nav();
    
    }
    
    /**
     * Echo archive pagination in Previous Posts / Next Posts format.
     *
     * Applies <code>genesis_prev_link_text</code> and <code>genesis_next_link_text</code> filters.
     *
     * @since 0.2.2
     */
    function genesis_prev_next_posts_nav() {
    
    	$prev_link = get_previous_posts_link( apply_filters( 'genesis_prev_link_text', '« ' . __( 'Previous Page', 'genesis' ) ) );
    	$next_link = get_next_posts_link( apply_filters( 'genesis_next_link_text', __( 'Previous Page', 'genesis' ) . ' »' ) );
    
    	$prev = $prev_link ? '<div class="pagination-previous alignleft">' . $prev_link . '</div>' : '';
    	$next = $next_link ? '<div class="pagination-next alignright">' . $next_link . '</div>' : '';
    
    	$nav = genesis_markup( array(
    		'html5'   => '<div %s>',
    		'xhtml'   => '<div class="navigation">',
    		'context' => 'archive-pagination',
    		'echo'    => false,
    	) );
    
    	$nav .= $prev;
    	$nav .= $next;
    	$nav .= '</div>';
    
    	if ( $prev || $next )
    		echo $nav;
    }
    
    /** XXX
     * Echo archive pagination in page numbers format.
     *
     * Applies the <code>genesis_prev_link_text</code> and <code>genesis_next_link_text</code> 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;
    		//* XXX
    	}
    
    	if ( ( $paged + 2 ) <= $max ) {
    		//* XXX
    		$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 REMOVED XXX
    
    	//* 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 REMOVED XXX
    
    	echo '</ul></div>' . "\n";
    
    }
  • Author
    Posts
Viewing 21 post (of 21 total)
← 1 2
  • The forum ‘Design Tips and Tricks’ is closed to new topics and replies.

CTA

Ready to get started? Create a site or shop for themes.

Create a site with WP EngineShop for Themes

Footer

StudioPress

© 2023 WPEngine, Inc.

Products
  • Create a Site with WP Engine
  • Shop for Themes
  • Theme Features
  • Get Started
  • Showcase
Company
  • Brand Assets
  • Terms of Service
  • Accptable Usse Policy
  • Privacy Policy
  • Refund Policy
  • Contact Us
Community
  • Find Developers
  • Forums
  • Facebook Group
  • #GenesisWP
  • Showcase
Resources
  • StudioPress Blog
  • Help & Documentation
  • FAQs
  • Code Snippets
  • Affiliates
Connect
  • StudioPress Live
  • StudioPress FM
  • Facebook
  • Twitter
  • Dribbble