web-dev-qa-db-fra.com

Messages de boucle uniquement, à l'exclusion du premier message

Sur la page principale du blog d’un site que je suis en train de développer, mon concepteur a stylé le premier message de manière unique et dans une section différente de la page. Puisqu'il s'agit d'une page d'archive paginée, je dois parcourir tous les articles de la page paginée, à l'exception du premier article, car je l'aurai dans sa propre boucle.

J'ai essayé l'option Décalage dans la requête, mais j'ai appris que cela tue la pagination qui ne fonctionnera pas.

Merci pour l'aide.

1
jons

Vous n’avez pas besoin de requêtes séparées, vous pouvez exécuter plusieurs boucles sur la même requête.

// output first post
if( have_posts() ){
    the_post();
    the_title();
}

// output the rest of the posts...
if( have_posts() ){
    while( have_posts() ){
        the_post();
        the_title();
    }
}

Vous pouvez également utiliser rewind_posts() pour remettre la publication actuelle à 0, ainsi que définir manuellement $wp_query->current_post sur l’index souhaité et lancer la boucle à cet endroit (remarque: le compteur de publication commence à 0 et non à 1).

Si vous souhaitez uniquement styler le premier message de la première page et non les pages suivantes, vous pouvez vérifier si c'est pas / paginé avec ! is_paged()

if( ! is_paged() ){
    echo 'this will only output on the first page';
    if( have_posts() ){
        the_post();
        the_title();
    }
}
2
Milo

Après cette étape:

Étape 1: Pour les différentes sections, vous pouvez afficher les premiers messages. quand mettre ce code.

<?php
// For your frist post
global $post,$firstPosts;
$args = array(
            'posts_per_page' => 1,
            'orderby' => 'post_date',
            'order' => 'DESC',
            'post_type' => 'post',
            'post_status' => 'publish',
        );
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        $firstPosts[] = $post->ID;
        echo get_the_title();  
    endwhile;
endif;
wp_reset_postdata();
?>

Étape 2: Sur la liste de votre page de blog. Mettez ce code dans Index.php fichier. Pour les postes en boucle uniquement, à l'exclusion du premier poste

<?php
// blog page
// Put this code after get_header(); line

global $wp_query,$firstPosts;
$args = array_merge( $wp_query->query,  array( 'post__not_in' => $firstPosts ) );
query_posts( $args ); 

?>
0
Jignesh Patel