WordPress : Essayer de faire fonctionner la pagination sur la grille de publication WP_Query()
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.php
ou index.php
pour 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_Query
ou $paged
quelque 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
while
boucle. - 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_Query
pagination 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?
0 commentaire