J'utilise un WP_Query
personnalisé pour afficher des messages sur une page d'accueil statique. et générer des liens de pagination numérotés avec des fonctions paginate_links
. C'est le code que j'ai ...
$latest_args = array(
'post_type' => 'post',
'category__not_in' => array( 3 ),
'ignore_sticky_posts' => 1,
'paged' => $paged,
);
$latest_query = new WP_Query( $latest_args );
if ( $latest_query->have_posts() ) :
while ( $latest_query->have_posts() ) : $latest_query->the_post();
get_template_part( 'content', get_post_format() );
endwhile;
if ( $latest_query->max_num_pages > 1 ) :
$big = 999999999;
echo '<div class="pagination">';
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $latest_query->max_num_pages
) );
echo '</div>';
endif;
endif;
wp_reset_postdata();
Mais lorsque je l'utilise sur mon static front page
, il affiche toujours le contenu de la première page sur toutes les autres pages également. Mais cela a été corrigé en ajoutant un paramètre paginé à la requête comme suggéré dans le codex .
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
Ce qui a corrigé le contenu en double sur les pages paginées, mais les liens de pagination basés sur les numéros restent toujours en première page Il affiche toujours le premier lien (1) comme actuel, ce qui rend difficile la navigation dans le reste des pages.
Bien que ce code fonctionne bien si je l’utilise sur une autre page que static front page
.
Toute solution à ce problème.
EDIT: mettre à jour
J'ai essayé de désactiver tous les plugins et de supprimer toutes les fonctions développées sur mesure de functions.php
mais le problème persiste. Donc, je suppose que cela doit faire quelque chose avec la façon dont j'utilise la fonction WP_Query
ou paginate_links
.
Il devrait y avoir une erreur dans ce code.
Les pages statiques ne fonctionnent pas avec la variable de requête paged
, elles ont besoin de la variable page
.
C'est la raison pour laquelle votre deuxième bloc de code rend la requête opérationnelle: il utilise la variable page
var lorsqu'elle est disponible.
Cependant, votre code de liens paginés utilise toujours paged
:
...
'format' => '?paged=%#%',
...
Donc, vous envoyez paged
requête var mais recherche page
var.
La solution consiste à faire en sorte que votre argument format
envoie la requête page
var si elle est utilisée à partir d'une page statique.
if ( $latest_query->max_num_pages > 1 ) :
$var = is_page() ? 'page' : 'paged'; // <-- choose var here
$big = 999999999;
echo '<div class="pagination">';
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?' . $var . '=%#%', // <-- use var here
'current' => max( 1, get_query_var($var) ), // <-- use var here
'total' => $latest_query->max_num_pages
) );
echo '</div>';
endif;
Non testé .