サポート » 使い方全般 » ページングで2ページ目移行も同じ記事になってしまう

  • 解決済 YusukeT

    (@yusuket)


    <?php query_posts(‘posts_per_page=2’); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    〜〜略〜〜
    <?php endwhile; endif; ?>

    <?php query_posts(‘posts_per_page=18&offset=2’); ?>
    <?php if(have_posts()): while(have_posts()): the_post(); ?>
    〜〜略〜〜
    <?php endwhile; endif; ?>

    <div class=”pager”>
    <?php global $wp_rewrite;
    $paginate_base = get_pagenum_link(1);
    if(strpos($paginate_base, ‘?’) || ! $wp_rewrite->using_permalinks()){
    $paginate_format = ”;
    $paginate_base = add_query_arg(‘paged’,’%#%’);
    }
    else{
    $paginate_format = (substr($paginate_base,-1,1) == ‘/’ ? ” : ‘/’) .
    user_trailingslashit(‘page/%#%/’,’paged’);;
    $paginate_base .= ‘%_%’;
    }
    echo paginate_links(array(
    ‘base’ => $paginate_base,
    ‘format’ => $paginate_format,
    ‘total’ => $wp_query->max_num_pages,
    ‘mid_size’ => 4,
    ‘current’ => ($paged ? $paged : 1),
    ‘prev_text’ => ‘«’,
    ‘next_text’ => ‘»’,
    )); ?>
    </div>

    index.phpに対し上記のようなコードで
    「1〜2記事目を大きく表示」「3〜20記事目は通常表示」としており、1ページ目は問題なく表示されています。
    ただページングを付けたところ、2ページ目も1ページ目と全く同じ記事が表示されてしまいます。

    ちなみに、上記のコードから「1〜2記事目を大きく表示」部分を削除し「全記事通常表示」としているarchive.phpでは、ページングは正常に作動しています。

    同様の経験がおありの方がいらっしゃいましたらご教授いただけると幸いです。
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター Daisuke Takahashi

    (@extendwings)

    query_posts('posts_per_page=2')query_posts('posts_per_page=18&offset=2')の2か所について、pagedの値を渡してあげないといけませんね。
    あと、 next_posts_link() と previous_posts_link() という関数もあるので調べてみてください。

    英語ですが、参考URLを張っておきます
    query-posts-with-pagination-not-working

    トピック投稿者 YusukeT

    (@yusuket)

    ご返信ありがとうございます。
    pagedの値を渡して一見うまくいったっぽいのですが、別の問題も出てきました。
    大きく表示する【A】と通常表示の【B】とすると、

    ◆1ページ目
    【A】記事1〜2 【B】記事3〜20

    ◆2ページ目
    【A】記事21〜22 【B】記事23〜40

    となってほしいのですが、pagedを渡すだけでは実際には
    ◆2ページ目
    【A】記事3〜4 【B】記事23〜40 となってしまいます。

    何かうまい解決策はありますでしょうか?><

    モデレーター Daisuke Takahashi

    (@extendwings)

    確かに、query_posts()にはpagedの代わりに以下の計算結果をoffsetとして渡してあげないといけないですね。
    計算式だけ書いておきます。
    {関数に渡すoffset} = {offset} + ({paged} – 1) * {posts_per_page}

    トピック投稿者 YusukeT

    (@yusuket)

    下記でうまくいきました!
    ご丁寧にありがとうございました!

    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $perpage = 22;//ページごとの表示件数
    $offset = ($paged-1)*$perpage;//現在のページに該当するoffset値の計算
    query_posts("posts_per_page=4&offset=$offset&paged=$paged"); ?>
    モデレーター Daisuke Takahashi

    (@extendwings)

    良かったです。他にもWP_Queryを使用する方法などがありますので、興味があれば調べてみてください!

    トピックを解決済みにしておいていただけると助かります。

    トピック投稿者 YusukeT

    (@yusuket)

    あ、忘れてました。
    WP_Queryも調べてみます!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「ページングで2ページ目移行も同じ記事になってしまう」には新たに返信することはできません。