Skip to content

Instantly share code, notes, and snippets.

@huubl
Created March 9, 2020 15:35
Show Gist options
  • Save huubl/1651344888900534ab0c1ac809633d44 to your computer and use it in GitHub Desktop.
Save huubl/1651344888900534ab0c1ac809633d44 to your computer and use it in GitHub Desktop.
Changing the posts per page on first page
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