C'est vraiment bizarre. En essayant de résoudre ce problème i, je me suis retrouvé avec une utilisation presque parfaite de paginate_links () au lieu d’une fonction de pagination personnalisée:
$myquery = new WP_Query($args);
$paged = get_query_var('page');
($paged == 0 ? $paged = 1 : $paged = $paged);
$pagination = paginate_links(array(
'total' => $myquery->max_num_pages,
'current' => $paged,
'show_all' => true,
'type' => 'list',
));
Cela semblait bien fonctionner. Jusqu'à ce que je découvre que peu importe ce que je fais, chaque fois que je suis après la page 1, la fonction affiche un href=""
vide sur mes premiers liens.
Donc, je reçois ces balises:
<!-- base page - example.com/parent-page/child-page/ -->
<!-- same for page 1 - example.com/parent-page/child-page/?page=1 -->
<ul class="page-numbers">
<li><span class="page-numbers current">1</span></li>
<li><a class="page-numbers" href="?page=2">2</li>
<li><a class="page-numbers" href="?page=3">3</li>
<li><a class="page-numbers" href="?page=4">4</li>
<li><a class="next page-numbers" href="?page=2">Next</li>
</ul>
<!-- page 2 - example.com/parent-page/child-page/?page=2 -->
<ul class="page-numbers">
<li><a class="prev page-numbers" href="">Previous</a></li> <!-- empty href="" -->
<li><a class="page-numbers" href="">1</li><!-- empty href="" -->
<li><span class="page-numbers current">2</span></li>
<li><a class="page-numbers" href="?page=3">3</li>
<li><a class="page-numbers" href="?page=4">4</li>
<li><a class="next page-numbers" href="?page=2">Next</li>
</ul>
<!-- page 3 and onwards - example.com/parent-page/child-page/?page=3 -->
<ul class="page-numbers">
<li><a class="prev page-numbers" href="?page=2">Previous</a></li> <!-- correct -->
<li><a class="page-numbers" href="">1</li><!-- empty href="" -->
<li><a class="page-numbers" href="?page=2">2</li>
<li><span class="page-numbers current">3</span></li>
<li><a class="page-numbers" href="?page=4">4</li>
<li><a class="next page-numbers" href="?page=2"></li>
</ul>
En fouillant dans paginate_links () sur wp-includes/general-template.php (vers la ligne 1954), j’ai constaté que, pour une raison quelconque, il passe explicitement des arguments de liens vides au lien Précédent lorsque vous êtes à la page 2:
if ( $prev_next && $current && 1 < $current ) :
$link = str_replace('%_%', 2 == $current ? '' : $format, $base);
et au premier lien (ligne 1968)
if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
$link = str_replace('%_%', 1 == $n ? '' : $format, $base);
vous ne pensez pas pourquoi, et s’il est possible de l’éviter sans créer une autre fonction de pagination?
Avez-vous essayé de spécifier les arguments base
et format
pour paginate_links()
? Il assume les valeurs par défaut de:
'base' => '%_%',
'format' => '?page=%#%',
Votre base
devrait être quelque chose comme /parent-page/child-page/%_%
; alors le lien de première page sera vers /parent-page/child-page/
, et les liens suivants suivront le format /parent-page/child-page/?page=3
(exemple pour la page 3).
Dans base
, le %_%
est remplacé par l'argument format
.
Dans format
, le %#%
est remplacé par le numéro de page.
http://codex.wordpress.org/Function_Reference/paginate_links
Pour ceux qui sont intéressés, voici le code qui a fonctionné pour moi:
echo paginate_links( array(
'current' => max(1, get_query_var('paged')),
'total' => $wp_query->max_num_pages,
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
) );
C’est horriblement démodé, mais j’ai eu des problèmes avec ça et j’ai eu les choses suivantes à travailler -
echo paginate_links(array(
'base' => remove_query_arg('page', get_pagenum_link(1)).'%_%',
'current' => max(1, get_query_var('page')),
'end_size' => 2,
'total' => $this->items->max_num_pages,
));