サポート » 使い方全般 » 2ページ目の最初の記事に1ページ目の最後の記事が表示されてしまう

  • 解決済 chibiyuko_0124

    (@chibiyuko_0124)


    いつもお世話になっております。

    投稿記事一覧を、1ページ目は10個・2ページ目以降は9個表示をさせたく
    functions.phpに以下のように記述しておりますが、
    2ページ目の最初に、1ページ目で表示していた10件目の記事が表示されてしまいます。
    つまり10件目の記事が重複してしまっております。
    重複してしまうのは2ページ目のみで、3ページ目以降は問題ありません。

    function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() )
    return;
    if ( $query->is_post_type_archive( 'ポスト名' ) ) {
    $query->set( 'posts_per_page', '10' );
    }
    $paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    if ( $query->is_post_type_archive( 'ポスト名' ) && $paged >= 2){
        $query->set('posts_per_page',9);
    }}
    add_action( 'pre_get_posts', 'change_posts_per_page' );

    どこの記述が間違っているか御教示いただけますと幸いです。

    よろしくお願いいたします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • ちなみにですが、2ページ目の表示件数を変更すると、下記のように表示されます。

    10件
    正常に11件目以降の記事一覧が表示されます。重複はございません。

    8件
    2ページ目の最初の2つの記事が、1ページ目の9件目と10件目の記事となってしまいます。
    2つの記事が重複してしまっている形です。

    11件
    2ページ目の最初に表示されるべき11件目の記事が表示されず、12件目以降の記事が11件出てきます。

    よろしくお願いいたします。

    ページによって件数を変えるのは、フィルターフックだけではたぶん無理でしょう。やってみたことはありませんが、「何番目の投稿から表示し始めるか」の計算式や、それを使って投稿を取得したりページ送りしたりするコードを自分で書く必要があると思います。

    gblsm様

    ご回答ありがとうございます。
    高度な記述が必要なんですね。。
    上記のソースは下記のサイトを参考にしました。
    カスタム投稿で使用しているので、少し変えています。

    http://ounziw.com/2014/07/11/wordpress-pre_get_posts/

    他にも何かご存知な方がいらっしゃいましたらアドバイスをいただけますと幸いです。

    よろしくお願いいたします。

    試してないので推測ですが
    2ページ目以降はoffsetで10件投稿を飛ばしてpagedの値を1減らして投稿数を9に変える用に変更できないでしょうか?

    *それよりは常にオフセットを1、投稿数を9にして1ページ目だけ最新1件の投稿を別表示したほうがいいかもしれません。

    失礼しました、gogowebさんの仰るとおりoffsetを再計算して一緒にセットすれば、フィルターにフックするだけでできますね。chibiyuko_0124さんが参考になさったリンク先のコードがそのようになっているので、あと一歩だと思います。

    gogoweb様 gdlsm様

    御回答ありがとうございます。
    参考サイトをもう一度見直し、下記のような記述に変更したところ無事に実現できました。
    正しい書き方かどうかいささか不安ですが…。

    define('POSTS_PER_PAGE_FOR_1ST',10); // 1ページ目の件数
    define('POSTS_PER_PAGE_FOR_2ND',9); // 2ページ目の件数
    add_action( 'pre_get_posts', 'change_posts_per_page' );
    function change_posts_per_page($query) {
    if ( is_admin() || ! $query->is_main_query() ) {
    return;
    }
    if ( $query->is_post_type_archive( 'ポスト名' ) ) {
    $query->set( 'posts_per_page', POSTS_PER_PAGE_FOR_1ST );
    }
    $paged = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
    if ($query->is_post_type_archive( 'ポスト名' ) && $paged >= 2){
    	$query->set('offset', POSTS_PER_PAGE_FOR_1ST + POSTS_PER_PAGE_FOR_2ND*($paged-2) );
    	$query->set('posts_per_page',POSTS_PER_PAGE_FOR_2ND);
    }
    }

    一応解決はしましたので、「解決済み」とさせていただきます。

    ありがとうございました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「2ページ目の最初の記事に1ページ目の最後の記事が表示されてしまう」には新たに返信することはできません。