サポート » 使い方全般 » カスタム投稿アーカイブで2ページ目以降が1ページ目と同じ一覧になってしまう

  • 【カスタム投稿アーカイブ:archive-news.php】

    <?php
          $paged = get_query_var('paged') ?: 1;
          $args = array(
            'posts_per_page' => 2,
            'post_type' => 'news',
            'orderby' => 'date',
            'order'   => 'DESC'    // 昇順
          );
          $the_query = new WP_Query( $args );
          if($the_query->have_posts()):
          while($the_query->have_posts()): $the_query->the_post();
        ?>
    
        /* 投稿の表示 */
    
        <?php endwhile; ?>
        <?php endif; ?>
    
    <?php
      if ( function_exists( 'pagination' ) ) :
        pagination( $the_query->max_num_pages, $paged );
      endif;
      wp_reset_postdata();
    ?>
    
    【functions.php】
    /**
    * ページネーション出力関数
    * $paged : 現在のページ
    * $pages : 全ページ数
    * $range : 左右に何ページ表示するか
    * $show_only : 1ページしかない時に表示するかどうか
    */
    function pagination( $pages, $paged, $range = 4, $show_only = false ) {
        $pages = ( int ) $pages;    //float型で渡ってくるので明示的に int型 へ
        $paged = $paged ?: 1;       //get_query_var('paged')をそのまま投げても大丈夫なように
    
        //表示テキスト
        $text_first   = "<<";
        $text_before  = "< 前へ";
        $text_next    = "次ページ >";
        $text_last    = ">>";
    
        if ( $show_only && $pages === 1 ) {
            // 1ページのみで表示設定が true の時
            echo '<nav class="pagination"><span class="current pager">1</span></nav>';
            return;
        }
    
        if ( $pages === 1 ) return;    // 1ページのみで表示設定もない場合
    
        if ( 1 !== $pages ) {  //2ページ以上の時
            echo '<nav class="pagination"><ul class="page-numbers">';
            if ( $paged < $pages ) {  // 「次へ」 の表示
                echo '<li><a href="', get_pagenum_link( $paged + 1 ) ,'">', $text_next ,'</a></li>';
            }
            if ( $paged > 1 ) {  // 「前へ」 の表示
                echo '<li><a href="', get_pagenum_link( $paged - 1 ) ,'">', $text_before ,'</a></li>';
            }
            for ( $i = 1; $i <= $pages; $i++ ) {
                if ( $i <= $paged + $range && $i >= $paged - $range ) {  // $paged +- $range 以内であればページ番号を出力
                    if ( $paged === $i ) {
                        echo '<li><span aria-current="page" class="page-numbers current">', $i ,'</span></li>';
                    } else {
                        echo '<li><a href="', get_pagenum_link( $i ) ,'">', $i ,'</a></li>';
                    }
                }
            }
    
            if ( $paged + $range < $pages ) {  // 「最後へ」 の表示
                echo '<li><a href="', get_pagenum_link( $pages ) ,'"><span>', $text_last ,'</span></a></li>';
            }
            if ( $paged > $range + 1 ) {  // 「最初へ」 の表示
                echo '<li><a href="', get_pagenum_link(1) ,'">', $text_first ,'</a></li>';
            }
            echo '</ul></nav>';
        }
    }

    この様な記述でカスタム投稿にページネーションを実装しようとしているですが、2ページ目以降が1ページ目と同じ内容になってしまいます。

    いまは1ページに2記事ずつ表示しているのですが、2ページの内容は1ページ目と同じですがtitleは2つ目の記事(1ページ目の2つ目の記事)。3ページ目の内容は1ページ目と同じでtitleは3つ目の記事(本来2ページ目の1つ目の記事)となっています。

    どこかコードが間違っていると思うので、アドバイスお願いします。

    • このトピックは4年、 9ヶ月前にJOTAKI, Taisukeが編集しました。理由: レイアウト崩れのため、編集しました。
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • Honda

    (@rocketmartue)

    archive-news.php では、WP_Query を使用せずに通常のループにして、
    ページネーションの部分に、the_posts_pagination 関数を使用すればよいと思います。

    if ( have_posts() ) :
        // Start the Loop.
        while ( have_posts() ) : the_post();
            get_template_part( 'template-parts/content' );
        // End the loop.
        endwhile
    
        // Pagination
        the_posts_pagination( array( 'mid_size' => 2 ) );
    endif;

    表示件数の方は、fnctions.php に pre_get_posts を使ってメインクエリーを書き換えるようにします。

    /**
     * pre_get_posts を使ってメインクエリーを書き換える
     */
    add_action( 'pre_get_posts', 'change_posts_query' ); 
    function change_posts_query( $query ) {
        if ( is_admin() || ! $query->is_main_query() || is_preview() )
            return;
        // カスタム投稿アーカイブ:news
        if ( $query->is_main_query() && $query->is_post_type_archive( 'news' ) ) {
            $query->set( 'posts_per_page', 2 ); // 2件ずつ表示
            return;
        }
    }
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「カスタム投稿アーカイブで2ページ目以降が1ページ目と同じ一覧になってしまう」には新たに返信することはできません。