WordPress : Essayer de faire fonctionner la pagination sur la grille de publication WP_Query()

Publié par Jean-Michel le

J’ai donc développé mon propre thème en tant qu’expérience d’apprentissage, et je ne sais pas comment faire fonctionner la pagination. J’ai essayé plusieurs choses avant d’en arriver là et de demander, il me semble qu’il me manque quelque chose .

C’est sur une « page d’accueil statique », c’est pourquoi le $paged appelle au moins ‘page’, c’est une chose que mes recherches ont mis en lumière.

    <?php while ( have_posts() ) : the_post(); ?>
        <h2>Recent Posts</h2>

            <?php
                 $paged = (get_query_var('page')) ? get_query_var('page') : 1;
                $Post = array(
                    'post_type'      => 'post',
                    'posts_per_page' => 4,
                    'orderby'     => 'modified',
                    'order'       => 'DESC',
                    'paged' => $paged
                );
                $q    = new WP_Query( $Post );
            ?>
            <div class="grid row posts">
                <?php while ( $q->have_posts() ) : $q->the_post(); ?>
                <div class="col">
                    <div class="date-container">
                        <p class="post-date bg-darkpurple">
                            <?php 
                            //echo get_the_date()
                                $u_time = get_the_time('U');
                                $u_modified_time = get_the_modified_time('U');
                                    if ($u_modified_time >= $u_time + 86400) {
                                echo "Last updated ";
                                    the_modified_time('F jS, Y');
                                echo ""; }
                                else {echo "Posted "; the_time('F jS, Y');}
                            ?>
                        </p>
                    </div>
                    <?php
                        $perma_cat = get_post_meta($post->ID , '_category_permalink', true);
                            if ( $perma_cat != null ) {
                                $cat_id = $perma_cat['category'];
                                $category = get_category($cat_id);
                            } else {
                                $categories = get_the_category();
                                $category = $categories[0];
                            }
                                $category_link = get_category_link($category);
                                $category_name = $category->name;  
                            ?>

                        <picture class="post-thumb block">

                            <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail('medium'); ?></a>
                            <div class="cat-container">
                                <a class="post-cat bg-darkpurple" href="<?php echo $category_link ?>"><?php echo $category_name ?></a>
                            </div>

                        </picture>

                        <h3>
                            <a href="<?php the_permalink(); ?>">
                                <?php the_title(); ?>
                            </a>
                        </h3>
                            <?php echo '<p class="excerpt">' . get_the_excerpt(). '</p>'; ?>
                </div>
                <?php endwhile; ?>
            </div>
                <div class="pagination">
                    <?php 
                        echo paginate_links( array(
                        'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
                        'total'        => $query->max_num_pages,
                        'current'      => max( 1, get_query_var( 'page' ) ),
                        'format'       => '?page=%#%',
                        'show_all'     => false,
                        'type'         => 'plain',
                        'end_size'     => 2,
                        'mid_size'     => 1,
                        'prev_next'    => true,
                        'prev_text'    => sprintf( '<i></i> %1$s', __( 'Newer Posts', 'text-domain' ) ),
                        'next_text'    => sprintf( '%1$s <i></i>', __( 'Older Posts', 'text-domain' ) ),
                        'add_args'     => false,
                        'add_fragment' => '',
                    ) );
                    ?>
                </div>
            <?php wp_reset_postdata(); ?>
        <?php endwhile; ?>

Merci pour toute idée

Solution n°1 trouvée

Si vous êtes défini sur une page d’accueil statique, pourquoi y aurait-il une pagination ?

La bonne façon d’avoir une grille paginée de messages comme page d’accueil est de définir la page d’accueil sur « Vos derniers messages ». Vous développerez ensuite votre modèle front-page.php, home.phpou index.phppour afficher les articles sous forme de grille (utilisez la hiérarchie des modèles pour déterminer le fichier dont vous avez besoin).

Dans ce modèle, vous n’avez pas besoin d’utiliser WP_Queryou $pagedquelque chose comme ça. Seule la boucle principale :

<h2>Recent Posts</h2>

<div class="grid row posts">
    <?php while ( have_posts() ) : the_post(); ?>
        <div class="col">
            <!-- Post markup goes here. -->
        </div>
    <?php endwhile; ?>
</div>

<div class="pagination">
    <?php 
    echo paginate_links( array(
        'end_size'     => 2,
        'mid_size'     => 1,
        'prev_text'    => sprintf( '<i></i> %1$s', __( 'Newer Posts', 'text-domain' ) ),
        'next_text'    => sprintf( '%1$s <i></i>', __( 'Older Posts', 'text-domain' ) ),
    ) );
    ?>
</div>

Notez les autres modifications que j’ai apportées :

  • Les liens de pagination doivent être en dehors de la whileboucle.
  • J’ai supprimé les arguments paginate_links()car ils étaient soit inutiles en raison de la structure de boucle appropriée, soit parce qu’ils étaient simplement définis sur les valeurs par défaut.

Si vous me faites plaisir dans les commentaires, cette mauvaise utilisation de la WP_Querypagination est de loin l’erreur la plus courante que je vois sur ce site, donc je suis juste curieux de savoir où vous avez eu l’idée que vous deviez faire un new WP_Query, car il ne devrait jamais être nécessaire pour la liste principale des messages dans l’un des modèles standard, mais je le vois presque tous les jours. Existe-t-il un didacticiel diffusant cela, ou quelque chose dans la documentation officielle qui implique cela?

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *