web-dev-qa-db-ja.com

Paginate_links()のremove_query_arg()方法

以下のようにpaginate_links()を使ってページネーションを実装しました:

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

}

そして、ループ内でwpse229670_pagination();を使用して簡単にページネーションを表示することができます。あるいはカスタムループの場合は、ローカルクエリをパラメータとして渡すことができます。

それはうまくいっています。

シナリオは、モーダル警告をユーザーに表示するために、次のようなクエリ引数を追加することです。

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

ただし、ページ区切りリンクには引き続き警告が表示されます。これは、クエリからremove_query_arg()を実行できないためです。後続のページにも同様に引数が含まれています。

私は私のページネーション関数の中で必要な[一度だけ] query_argsを削除できればもっと良いと思う。あなたは私ができないことを知っています:

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

私の関数内の$queryはオブジェクトだからです。

それで、どのように私は$wp_queryオブジェクトまたはremove_query_arg()からpaginate_links()できますか?

7
Mayeenul Islam

あなたがこの種のアプローチを意味しているかどうかわからない:

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

現在のGETクエリ内にある場合は、ページ区切りリンクからfrom_expiredを削除します。

9
birgire