set('ppp_include_sticky',true); } return $q; } // Truncate posts array to adjust post count add_filter( 'the_posts', 'sticky_count_offset', 10, 2 ); function sticky_count_offset( $posts, $q ) { if ( $q->get( 'ppp_include_sticky' ) && 0 < $q->get( 'posts_per_page' ) && false == $q->get( 'ignore_sticky_posts' ) ) { $posts = array_slice( $posts, 0, $q->get( 'posts_per_page' ) ); } return $posts; } // Are we on a paged home with sticky posts ? function is_paged_home_with_sticky( $q ) { return $q->is_home() && $q->get( 'ppp_include_sticky' ) && $q->is_paged() && false == $q->get( 'ignore_sticky_posts' ); } // Define page offset to show posts truncated on previous page add_filter( 'pre_get_posts', 'sticky_count_on_paged', 20 ); function sticky_count_on_paged( $q ) { if ( is_paged_home_with_sticky( $q ) ) { $q->set('post__not_in', get_option( 'sticky_posts', array() ) ); $offset = count( get_option( 'sticky_posts', array() ) ); $page_offset = $q->get( 'posts_per_page', get_option( 'posts_per_page' ) ) * ( $q->get( 'paged' ) -1 ) - $offset; $q->set( 'offset', $page_offset ); } return $q; } // Adjust found_posts property to display the right number of pages add_filter( 'found_posts', 'sticky_adjust_offset_pagination', 1, 2 ); function sticky_adjust_offset_pagination( $found_posts, $q ) { if ( is_paged_home_with_sticky( $q ) ) { $offset = count( get_option( 'sticky_posts', array() ) ); return $found_posts + $offset; } return $found_posts; }