Je travaille avec la fonction paginate_links () et j'essaie de créer une pagination dans ce genre de style.
<3 4 5 6 7>
Logiquement, je pensais que ce serait simple en définissant end_size sur 0 et mid_size sur 2.
Je l'ai fait mais mon code est en sortie comme ceci;
<1 ... 3 4 5 6 7 ... 9>
Pour moi, cela indique 1 comme taille de fin, même si je l’ai défini sur 0 (à moins que je ne comprenne pas bien ce que fait l’option).
Ma fonction actuelle de liens de pagination ressemble à ceci;
$paginationArgs = array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $loop->max_num_pages,
'end_size' => 0,
'mid_size' => 1,
'prev_next' => TRUE,
'prev_text' => '<',
'next_text' => '>',
'type' => 'list',
'add_args' => FALSE,
'add_fragment' => ''
)
$pagination = paginate_links($paginationArgs);
Est-ce que quelqu'un a des conseils/réponses?
Merci Harry.
Voici une suggestion:
Nous devons d’abord laisser paginate_links()
renvoyer un tableau au lieu d’une liste HTML:
'type' => 'array',
Ensuite, nous pouvons récupérer la sortie avec:
$paginate_links = paginate_links( $paginationArgs );
Le plan est alors de filtrer les liens recherchés.
Récupérons la valeur actuelle:
$c = $paginationArgs['current'];
Nous construisons le filtre de recherche comme:
$allowed = [
' current',
'prev ',
'next ',
sprintf( '/page/%d/', $c-2 ),
sprintf( '/page/%d/', $c-1 ),
sprintf( '/page/%d/', $c+1 ),
sprintf( '/page/%d/', $c+2 )
];
Notez que nous pourrions affiner ceci sur les bords et ne filtrer que ce qui est disponible. Il est également possible de le faire dépendre dynamiquement de l'attribut mid_size
. Nous supposons ici que:
'mid_size' => 2,
Notez également que:
'end_size' => 0,
signifie que end_size
est 1 en raison des vérifications suivantes dans la fonction principale paginate_links()
:
if ( $end_size < 1 ) {
$end_size = 1;
}
Ensuite, nous filtrons les liens de pagination autorisés:
$paginate_links = array_filter(
$paginate_links,
function( $value ) use ( $allowed ) {
foreach( (array) $allowed as $tag )
{
if( false !== strpos( $value, $tag ) )
return true;
}
return false;
}
);
Enfin, nous affichons le résultat:
if( ! empty( $paginate_links ) )
printf(
"<ul class='page-numbers'>\n\t<li>%s</li>\n</ul>\n",
join( "</li>\n\t<li>", $paginate_links )
);
J'espère que vous pourrez l'adapter à vos besoins!