Created
March 9, 2020 15:35
-
-
Save huubl/1651344888900534ab0c1ac809633d44 to your computer and use it in GitHub Desktop.
Changing the posts per page on first page
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
add_action( 'pre_get_posts', 'query_offset', 1 ); | |
function query_offset( &$query ) { | |
// Before anything else, make sure this is the right query... | |
if ( ! ( $query->is_home() || is_main_query() ) || is_admin() ) { | |
return; | |
} | |
// First, define your desired offset... | |
$offset = -1; | |
// Next, determine how many posts per page you want (we'll use WordPress's settings) | |
$ppp = get_option( 'posts_per_page' ); | |
// Next, detect and handle pagination... | |
if ( $query->is_paged ) { | |
// Manually determine page query offset (offset + current page (minus one) x posts per page) | |
$page_offset = $offset + ( ( $query->query_vars['paged']-1 ) * $ppp ); | |
// Apply adjust page offset | |
$query->set( 'offset', $page_offset ); | |
} | |
else { | |
// This is the first page. Set a different number for posts per page | |
$query->set( 'posts_per_page', $offset + $ppp ); | |
} | |
} | |
add_filter( 'found_posts', 'adjust_offset_pagination', 1, 2 ); | |
function adjust_offset_pagination( $found_posts, $query ) { | |
// Define our offset again... | |
$offset = -1; | |
// Ensure we're modifying the right query object... | |
if ( is_admin() ){ | |
return; | |
}else if( $query->is_home() && is_main_query() ) { | |
// Reduce WordPress's found_posts count by the offset... | |
return $found_posts - $offset; | |
} | |
return $found_posts; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment