WP_Queryで2ページ目以降のページネーションを表示する

  • ブックマーク
  • -
    コピー
固定ページでタクソノミーの一覧を出したい時、カスタム投稿のカスタムタクソノミーも含めて表示したい時はクエリーを上書きするか WP_Queryクラスを利用します。 1ページ目は指定通りに表示されますが2ページ目以降はうまく表示されないことがあるのでそこらへんの問題を解決できそうなヒントになる記事をまとめていきます。
WP_Queryを利用して2ページ目以降が表示されない問題についての記事
WP_Queryを使用した時の次の記事・前の記事について
上記の参考URLをもとに必要としてた環境で実装したソースは下記です。 functionsp.php

<?php
function wp_query_pagination( $pages = '', $range = 4 ) {
    $showitems = ( $range * 2 ) + 1;

    global $paged;
    if ( empty( $paged ) ) {
        $paged = 1;
    }

    $nextpage = $paged + 1;
    $prevpage = $paged - 1;

    if ( $pages == '' ) {
        global $wp_query;
        $pages = $wp_query->max_num_pages;
        if ( ! $pages ) {
            $pages = 1;
        }
    }

    if ( 1 != $pages ) {
        echo "<div class=\"pagination\">";

        if ( $paged > 1 ) {
            echo '<a href="' . get_pagenum_link() . 'page/' . $prevpage . '">前へ</a>';
        }
        if ( $pages > $paged ) {
            echo '<a href="' . get_pagenum_link() . 'page/' . $nextpage . '">次へ</a>';
        }

        echo "</div>\n";
    }
}


page-〇〇.php

<?php
get_header();
$post_terms_slug = $post->post_name;

?>
<header>
    <p>リスト数
        <small>
            <?php
            $list_term_loop = array(
                'post_type'   => array( 'custom_post01', 'custom_post02' ),
                'post_status' => 'published',
                'tax_query'   => array(
                    'relation' => 'OR',
                    array(
                        'taxonomy'         => 'custom_taxonomy01',
                        'field'            => 'slug',
                        'terms'            => $post_terms_slug,
                        'include_children' => true,
                        'operator'         => 'IN'
                    ),
                    array(
                        'taxonomy'         => 'custom_taxonomy02',
                        'field'            => 'slug',
                        'terms'            => $post_terms_slug,
                        'include_children' => true,
                        'operator'         => 'IN'
                    ),
                ),
                'numberposts' => - 1
            );

            $num = count( get_posts( $list_term_loop ) );
            echo $num;
            ?>件
        </small>
    </p>
</header>

<div class="new-arrival-post-list">
    <h2 class="post-list-title">
        <?php the_title(); ?>
    </h2>
    <ul class="posts">
        <?php
        $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

        $term_loop = new WP_Query( array(
            'paged'       => $paged,
            'post_type'   => array( 'custom_post01', 'custom_post02' ),
            'post_status' => 'published',
            'tax_query'   => array(
                'relation' => 'OR',
                array(
                    'taxonomy'         => 'custom_taxonomy01',
                    'field'            => 'slug',
                    'terms'            => $post_terms_slug,
                    'include_children' => true,
                    'operator'         => 'IN'
                ),
                array(
                    'taxonomy'         => 'custom_taxonomy02',
                    'field'            => 'slug',
                    'terms'            => $post_terms_slug,
                    'include_children' => true,
                    'operator'         => 'IN'
                ),
            ),
        ) );

        while ( $term_loop->have_posts() ) :$term_loop->the_post();
            echo '<li>';
            the_title();
            echo '</li>';
        endwhile;
        ?>
    </ul>
    <div class="posts-nav-link">
        <?php
        if ( function_exists( "wp_query_pagination" ) ) {
            wp_query_pagination( $term_loop->max_num_pages );
        } ?>
    </div>


</div>


<?php get_footer(); ?>


  • ブックマーク
  • -
    コピー

この記事を書いた人

Susumu Seino

1988年 東京都足立区生まれ。瀬戸内海の小島と東京に拠点を持ち、2020年からは夫婦でアドレスホッピングを計画しているデジタルノマドな日本人。デジタルパブリッシング代理店のアニューマの創業者です。