【WordPress】1ページ目と2ページ目以降の表示記事数を切り分ける

1ページ目は数件表示、2ページ目以降はたくさんの記事を表示したい

front-page.phpはサイトトップとして利用をしていて、/blog/ページをindex.phpで作成していたのですが、index.phpの中身を1ページ目は数件だけ紹介として表示し、2ページ目以降のまとまった数の記事を表示する、という事になった。

「!is_paged()」で切り分ければすぐにできるのかと思っていたのだが、スマートに行かないので悩んでいたら、下記ページにありましたのでメモさせていただきます。

条件分岐の部分、「!is_front_page」となっていますが、私はindex.phpで利用しているので「!is_home」にして利用させていただきました。

function.php
//1ページ目と2ページ目で表示する記事数を変える
define('PAGE_1ST', 5);  //1ページ目の記事数
define('PAGE_2ND', get_option( 'posts_per_page' )); //2ページ目の記事数
function change_posts_paging( $query ) {
  if ( is_admin() || !is_front_page() ){
    return; //フロントページでのみ動作
  }
  //現在のページを取得
  $paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
  if ($paged >= 2){ //2ページ目以降の時
    $query->set('offset', PAGE_1ST + PAGE_2ND*($paged-2));
    $query->set( 'posts_per_page', PAGE_2ND);
  }else {   //1ページ目の時
    $query->set( 'posts_per_page', PAGE_1ST );
  }
}
add_action( 'pre_get_posts', 'change_posts_paging' );
 
//next_pages_link()を正しく動かす
function found_offset( $found_posts, $query ) {
 
    $offset = PAGE_1ST;
 
    if( !is_admin() && $query->is_main_query() ) {
        $found_posts = $found_posts + $offset;
    }
    return $found_posts;
}
add_action( 'found_posts', 'found_offset', 10, 2 );

【WordPress】フロントページと2ページ目以降で記事数を変更するとnext_posts_link()が正しく表示されなくなった話。

Yuki Nakata

中田デザイン事務所 代表。
WEBデザイナー(フリー)/ WEB講師(非常勤)/ 海外販売(法人)他

お仕事のご相談はお問い合わせフォームへお願いします。