J'utilise le code suivant pour générer une pagination:
$wp_query = new WP_Query();
$wp_query->query('posts_per_page=5'.'&paged='.$paged);
$big = 999999999;
echo '<div class="pagination">';
echo paginate_links(array( 'base' => '%_%',
'format' => str_replace($big, '%#%', esc_url(get_pagenum_link( $big ))),
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'end_size' =>4,
'type' => 'list'));
echo '</div>';
Sa génération de mes liens correctement sur la première page, mais si je vais à une autre page tout est toujours correct sauf le lien pour la page 1 est toujours l'URL de la page sur laquelle je suis. On dirait que je manque quelque chose de simple, quelqu'un connait un correctif?
Réponse courte:
Essayer
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
Réponse longue:
J'ai jeté un œil au code source paginate_links()
( v3.5.1 ) et il y a cette ligne ( # )
$link = str_replace('%_%', 1 == $n ? '' : $format, $base);
cela vous donne le lien vide de la première page.
Avec votre configuration, vous avez $base = "%_%"
et $format = "http://example.com/page/%#%/"
donc ceci devient:
$link = str_replace('%_%', 1 == $n ? '' : "http://example.com/page/%#%/", "%_%");
où nous avons deux cas:
n=1: $link = str_replace('%_%', '', "%_%");
n>1: $link = str_replace('%_%', "http://example.com/page/%#%/", "%_%");
et après le remplacement:
n=1: $link = '';
n>1: $link = "http://example.com/page/%#%/";
Voici un exemple de la sortie de paginate_links()
:
<ul class='page-numbers'>
<li><a class="prev page-numbers" href="http://example.com/page/2/">« Previous</a></li>
<li><a class='page-numbers' href=''>1</a></li>
<li><a class='page-numbers' href='http://example.com/page/2/'>2</a></li>
<li><span class='page-numbers current'>3</span></li>
<li><a class='page-numbers' href='http://example.com/page/4/'>4</a></li>
<li><a class='page-numbers' href='http://example.com/page/5/'>5</a></li>
<li><a class='page-numbers' href='http://example.com/page/6/'>6</a></li>
<li><a class="next page-numbers" href="http://example.com/page/4/">Next »</a></li>
</ul>
Si vous utilisez plutôt ( # ):
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
alors vous obtenez:
$link = str_replace('%_%', 1 == $n ? '' : "?paged=%#%", "http://example.com/page/%#%");
Depuis pas de remplacement aura lieu
$link = "http://example.com/page/%#%";
dans les deux cas (n = 1 et n> 1) et vous avez un lien de première page non vide avec la sortie de paginate_links()
:
<ul class='page-numbers'>
<li><a class="prev page-numbers" href="http://example.com/page/2/">« Previous</a></li>
<li><a class='page-numbers' href='http://example.com/page/1/'>1</a></li>
<li><a class='page-numbers' href='http://example.com/page/2/'>2</a></li>
<li><span class='page-numbers current'>3</span></li>
<li><a class='page-numbers' href='http://example.com/page/4/'>4</a></li>
<li><a class='page-numbers' href='http://example.com/page/5/'>5</a></li>
<li><a class='page-numbers' href='http://example.com/page/6/'>6</a></li>
<li><a class="next page-numbers" href="http://example.com/page/4/">Next »</a></li>
</ul>
Pour avoir un lien de première page non vide, il semble que $format
puisse être n'importe quelle chaîne tant que $base
n'inclut pas la chaîne "%_%"
, c'est-à-dire que cela devrait fonctionner correctement:
'format' => '?paged=%#%',
'format' => 'page/%#%',
'format' => 'asdfasdfasdfasdfasdf',
Si vous n'utilisez pas de liens permanents, l'exemple dans ( # ) vous donnera également un lien de première page non vide, car
$link = str_replace('%_%', 1 == $n ? '' : "?paged=%#%", "http://example.com/?paged=%#%");
avec des remplacements.
Merci birgire pour l'aide. Je partage le résultat de mes paginate_links (), qui fonctionnent avec les pages de taxonomie personnalisées exactement comme il me faut.
J'espère que cela aidera quelqu'un à le réparer le plus rapidement possible.
Alors la voici:
if (empty($pagerange)) {
$pagerange = 2;
}
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
$pagination_args = array(
'base' => str_replace('%_%', 1 == $paged ? '' : "?page=%#%", "?page=%#%"),
'format' => '?page=%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('<i class="fa fa-angle-left"></i>'),
'next_text' => __('<i class="fa fa-angle-right"></i>'),
'type' => 'list',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<nav class='custom-pagination'><ul>";
echo $paginate_links;
echo "</ul></nav>";
}
Je suis tombé sur le même problème et j'ai découvert que je pouvais remplacer:
'current' => max( 1, get_query_var('paged') ),
avec:
'current' => max( 1, get_query_var('page') ),
Il suffit donc de renommer 'paginé'> 'page' dans query var et cela fonctionne.