web-dev-qa-db-ja.com

ページ付けがカスタムクエリで機能しない

自分のウェブサイトでカテゴリ別に検索したときにページを変更しようとしています。特定のカテゴリで検索していないときはページを正しく切り替えることができますが、カテゴリを検索しているときはページを切り替えることができません。

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
        $orderby = ( get_query_var( 'orderby' ) ) ? absint( get_query_var( 'orderby' ) ) : 'display_name';
        if($_GET['search'] && !empty($_GET['search'])) {
            $search = $_GET['search'];
        }

        if($_GET['category'] && !empty($_GET['category'])) {
            $category = $_GET['category'];
        }

        $args = array(
            'orderby' => 'Rand',
            'number' => 7,
            'paged' => $paged,
            'search' => '*'.esc_attr( $search ).'*',
            'meta_query' => array (
                array(
                    'key' => 'organization_category_2',
                    'value' => $category,
                    'compare' => 'like'
                )
            )
        );


        $user_query = new WP_User_Query($args);

そして私のページ付けリンク:

<?php
              $total_user = $user_query->total_users;
              $total_pages=ceil($total_user/7);

                echo paginate_links(array(
                    'base' => get_pagenum_link(1) . '%_%',
                    'format' => '?paged=%#%',
                    'current' => $paged,
                    'total' => $total_pages,
                    'prev_text' => 'Previous',
                    'next_text' => 'Next',
                    'type'     => 'list',
                ));

  ?>

検索しようとするたびに、次のようなURLが表示されます。

https://mywebsite.ca/directory/?search&category=Government#038;category=Government&paged=2

1
Lewis

ページネーション関数はメインのクエリとは別に動作するので、新しいクエリを作成する代わりにpre_get_postsを使用する必要があります。

しかし、あなたはWP_User_Queryを使っているので、標準的なページ付けシステムはあなたのためには決して働きません。あなたはここで「あなた自身の」ページネーションシステムをロールし、そしてあなた自身のURLを手動で生成し、そしてURLに基​​づいてあなた自身でページを設定しなければならないでしょう

2
Tom J Nowell
if( $user_query->max_num_pages > 1 ) {

    $big = 999999;
    echo paginate_links( array(
        'base'      => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format'    => '?paged=%#%',
        'current'   => max( 1, $paged ),
        'total'     => $user_query->max_num_pages
    ) );
}

これはあなたにとって役に立つかもしれません

1
Mukii kumar

これは公式のWordPress Codexからの例です https://codex.wordpress.org/Function_Reference/paginate_links#Example_With_a_Custom_Query

カスタムクエリの例

<?php
//Protect against arbitrary paged values
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$args = array(
    'posts_per_page' => 5,
    'category_name' => 'gallery',
    'paged' => $paged,
);

$the_query = new WP_Query( $args );
?>
<!-- the loop etc.. -->

上記のカスタムクエリに適応したpaginate_linksパラメータの例:

<?php
$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $the_query->max_num_pages
) );
?>
0
Stefan