php – Ordem dos posts, vários loops, parâmetro offset e paginação no WordPress

Olá preciso exibir 3 loops em ordem onde os 2 primeiros loops serão os cinco primeiros posts do site em destaque e o loop final como o próprio nome já diz mostrará todos os demais posts.

Essa é a minha index:

    <div class="primeiro-loop">
        <?php $consulta = new WP_Query( array('posts_per_page' => 1 )); ?>
        <?php while ($consulta->have_posts()) : $consulta->the_post(); $do_not_duplicate = $post->ID; ?>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <?php endwhile; ?>
    </div>

<br>

    <div class="segundo-loop">
        <?php $consulta = new WP_Query( array('posts_per_page' => 4, 'offset'=> 1, )); ?>
        <?php while ($consulta->have_posts()) : $consulta->the_post(); $do_not_duplicate = $post->ID; ?>
            <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <?php endwhile; ?>
    </div>

<br>

    <div class="loop-final">
        <?php $allposts = new WP_Query( array('offset'=> 5,'paged' => $paged )); ?>
        <?php if ($allposts->have_posts()) : while ($allposts->have_posts()) : $allposts->the_post(); ?> 
            <h3 class="titulo-post"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <?php endwhile; else: ?>
        <?php endif; ?>
        <?php wp_reset_postdata(); ?>
    </div>
    <div class="pagination-home"><?php pagination();?></div>    

Exemplo dos posts em ordem:


  • Post 2
  • Post 3
  • Post 4
  • Post 5

Até aqui a ordem dos posts funciona bem exceto a Paginação que pelo o que andei pesquisando não funciona bem com o offset então para fazer funcionar implementei esse gancho no functions.php e a princípio está funcionando, no entanto depois de aplicá-lo a ordem dos posts acaba resetando e se repete em todos os loop o que pode ser?

add_action('pre_get_posts', 'myprefix_query_offset', 1 );
function myprefix_query_offset(&$query) {

    //Before anything else, make sure this is the right query...
    if ( ! $query->is_home() ) {
        return;
    }

    //First, define your desired offset...
    $offset = 0;
    
    //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. Just use the offset...
        $query->set('offset',$offset);

    }
}

Como ficou depois do gancho:


  • Post 1
  • Post 2
  • Post 3
  • Post 4

  • Demais posts também resetam…

e por fim gostaria de saber qual a lógica que devo usar para ocultar o loop 1 e 2 quando estiver na página 2 do site, eles sempre acabam mostrando.

Sou leigo em php mas será que há outra alternativa melhor para ordenar os posts do loop em vez do ‘offset’? Obrigado!