J'ai implémenté une pagination en utilisant paginate_links()
comme ci-dessous:
<?php
function wpse229670_pagination( $query = false ) {
global $wp_query;
$query = $query ? $query : $wp_query;
$total_pages = $query->max_num_pages;
$big = 999999999;
if ( $total_pages > 1 ) {
echo '<nav class="navigation posts-navigation" role="navigation">';
echo '<strong>'. __( 'Pages:', 'text-domain' ) .'</strong> ';
echo paginate_links( array(
'base' => ,
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $total_pages
) );
echo '</nav>';
} //endif ( $total_pages > 1 )
}
Et je peux facilement afficher ma pagination à l'aide de wpse229670_pagination();
dans la boucle, ou pour toute boucle personnalisée, je peux passer la requête locale en tant que paramètre.
Ça fonctionne bien.
Le scénario est, j'ajoute des arguments de requête comme celui-ci pour afficher un avertissement modal à l'utilisateur:
$terms = wp_get_post_terms( $post_id, 'my_tax' );
$term_link = get_term_link( $term_id, 'my_tax' );
$parameterized_url = add_query_arg( 'from_expired', 1, $term_link );
wp_redirect($parameterized_url);
exit;
Mais les liens de pagination continuent d'afficher l'avertissement, car je ne peux pas remove_query_arg()
à partir de la requête et les pages suivantes contiennent également l'argument.
Je pense que ce serait mieux si je pouvais supprimer [une fois] nécessaire query_args dans ma fonction de pagination. Tu sais que je ne peux pas faire:
//$query = remove_query_arg( 'from_expired', $query );
parce que $query
dans ma fonction est un objet.
Alors, comment puis-je remove_query_arg()
partir d'un objet $wp_query
ou de paginate_links()
?
Vous n'êtes pas sûr de vouloir dire ce genre d'approche:
add_filter( 'paginate_links', function( $link )
{
return
filter_input( INPUT_GET, 'from_expired' )
? remove_query_arg( 'from_expired', $link )
: $link;
} );
pour supprimer le from_expired
des liens de pagination s'il se trouve dans la requête GET en cours.