So entfernen Sie_query_arg () für paginate_links ()

7

Ich habe eine Paginierung paginate_links()wie folgt implementiert :

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

}

Und ich kann meine Paginierung einfach wpse229670_pagination();innerhalb der Schleife anzeigen oder für jede benutzerdefinierte Schleife die lokale Abfrage als Parameter übergeben.

Es funktioniert gut.

Das Szenario ist, dass ich einige Abfrage-Argumente wie dieses hinzufüge, um dem Benutzer eine modale Warnung anzuzeigen:

$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;

Aber die Paginierungslinks zeigen weiterhin die Warnung an, da ich nicht remove_query_arg()aus der Abfrage kann und die folgenden Seiten auch das Argument enthalten.

Ich denke, es wäre besser, wenn ich notwendige [einmalige] query_args in meiner Paginierungsfunktion entfernen könnte. Du weißt, ich kann nicht:

//$query = remove_query_arg( 'from_expired', $query );

denn $queryin meiner Funktion ist ein Objekt.

Also, wie kann ich remove_query_arg()von einem $wp_queryObjekt oder von paginate_links()?

Mayeenul Islam
quelle

Antworten:

11

Ich bin mir nicht sicher, ob Sie diesen Ansatz meinen:

add_filter( 'paginate_links', function( $link )
{
    return  
       filter_input( INPUT_GET, 'from_expired' )
       ? remove_query_arg( 'from_expired', $link )
       : $link;
} );

um die from_expiredaus den Paginierungslinks zu entfernen, wenn sie in der aktuellen GET-Abfrage enthalten sind.

Birgire
quelle
Nicht notwendig, wie ich es gemeint habe. Eine funktionierende Lösung war notwendig. +1 für die Lösung. Arbeiten am ersten Treffer. Vielen Dank :)
Mayeenul Islam
Es gibt möglicherweise eine Möglichkeit, dies nur auf Ihre benutzerdefinierte Paginierungsfunktion anzuwenden. Ich habe zuerst a vergessen. Aber ich habe das dem Code hinzugefügt, also haben Sie wahrscheinlich die feste Version ausprobiert. Ich
bin
Ich habe das Konzept kopiert, nicht den Code selbst - das könnte das Problem sein. ;-)
Mayeenul Islam
1
Das klingt nach einem guten allgemeinen Ratschlag zur konzeptionellen Nutzung dieser Website ;-) @MayeenulIslam
birgire