web-dev-qa-db-fra.com

Blogroll - Mise en page différente pour le premier message

Je souhaite que mon blog principal affiche 10 messages par page, mais le premier message de chaque page est configuré sur une division différente de celle située au-dessus du reste et comporte une image en vedette.

C'est ce que j'ai poursuivi pour le premier post de la page:

// WP_Query arguments
$args = array (
    'pagination'             => true,
    'paged'                  => $paged,
    'posts_per_page'         => '10',
    'ignore_sticky_posts'    => true,
    'order'                  => 'DESC',
    'orderby'                => 'date',
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
        $query->the_post();
                the_title();
        the_content();
    } 
?>

et ce fut pour la seconde:

<?php

// WP_Query arguments
$args = array (
    'pagination'             => true,
    'paged'                  => $paged,
    'posts_per_page'         => '9',
    'offset'                 => '1',
    'ignore_sticky_posts'    => true,
    'order'                  => 'DESC',
    'orderby'                => 'date',
);

// The Query
$query1 = new WP_Query( $args );

// The Loop
if ( $query1->have_posts() ) {
    while ( $query1->have_posts() ) {
        $query1->the_post();
        the_title();
        the_content();
    }
}

// Restore original Post Data
wp_reset_postdata();

?>

Le premier message change lorsque je suis en page mais les 9 autres articles ne changent jamais, même s'ils reçoivent le même argument paginé que le premier.

De plus, je suis partant pour toute autre solution possible. J'ai vu un article qui parlait de modifier le premier article avec une variable pour marquer la première fois que la boucle était exécutée, mais cela ne m'aide pas, car le premier article doit sortir de la boucle normale et se trouver dans sa propre section.

Merci d'avance pour toute aide que vous pouvez donner!

1
Nicholas Aguirre

La création de 2 requêtes pour votre champ d'application est un travail absolument inutile ...

Utilisez une seule requête et utilisez la propriété $wp_query->current_post pour modifier la sortie du premier message.

  $args = array (
    'pagination'             => true,
    'paged'                  => $paged,
    'posts_per_page'         => '10',
    'ignore_sticky_posts'    => true,
    'order'                  => 'DESC',
    'orderby'                => 'date',
  );

  // The Query
  $query = new WP_Query( $args );

  // The Loop
  if ( $query->have_posts() ) {

     $query->the_post();

     if ( $query->current_post == 0 ) {  // first post

       echo '<div class="first-post">';
       the_title();
       the_content();
       echo '</div>';

     } else {

        echo '<div class="second-to-ninth-post">';
        the_title();
        the_content();
        echo '</div>';

     }

     wp_reset_postdata();

  } 
5
gmazzap