web-dev-qa-db-fra.com

Comment remove_query_arg () pour paginate_links ()

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()?

7
Mayeenul Islam

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.

9
birgire