If you only wish to effect the one, single query then just can pass the offset
argument through the arguments array.
$offset = 1;
$ppp = 3;
if ( $query->is_paged ) {
$page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );
}
blog_items = array(
'post_type'=> 'post',
'paged' => $paged,
'posts_per_page'=> $ppp,
'status' => 'publish',
'offset' => $offset
);
$blogposts = get_posts($blog_items);
But since you are trying to paginate you may still have trouble with that. It may work better to push all of the arguments through pre_get_posts
not just some of them:
// in functions.php
add_action('pre_get_posts', 'myprefix_query_offset', 1 );
function myprefix_query_offset(&$query) {
if (is_main_query() || is_page_template( 'page-blog.php' ) ) {
$offset = 1;
$ppp = 3;
if ( $query->is_paged ) {
$page_offset = $offset + ( ($query->query_vars['paged']-1) * $ppp );
$query->set('offset', $page_offset );
}
else {
$query->set('offset',$offset);
}
$query->set('post_type','post');
$query->set('paged',$paged);
$query->set('posts_per_page',3);
$query->set('status','publish');
}
}
Then a normal loop in the page template should work:
if(have_posts()) {
while(have_posts()) {
the_post();
}
}
Use remove_action('pre_get_posts', 'myprefix_query_offset', 1 );
to remove the action.