サポート » 使い方全般 » 記事一覧の表示数

  • 解決済 aki

    (@akistar02)


    index.phpで記事一覧を表示しているのですが、
    ページャーで2ページ以降は20記事を表示、トップ(1ページ目)は9記事を表示、ということはできないでしょうか?

    ifで

    <?php         
    
    $paged = get_query_var( 'paged' );
    if (!$paged){
    	$pager = 9;
    }else{
    	$pager = 20;
    }
    
    $args = array(
    'posts_per_page' => $pager,
    'paged' => $paged
    
    );
    ?>

    とかやってみたのですがうまくいきません。
    記事数が合わなくなります・・・

    うまくいく方法はないでしょうか。

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

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

    (@jim912)

    2点調整する必要があります。
    引数部分しか書いてないので、WP_Query を用いているか、query_posts でやっているか分かりませんが、query_posts の場合は、$wp_query->found_posts に全投稿数、$wp_query->max_num_pages にposts_per_pageを元にした総ページ数が格納されます。

    1ページ目が9件、2ページ目以降が20件と指定した場合、この max_num_pages が変わってしまうため、この値を条件に合わせて書き換える必要があります。

    また、2ページ目が20件となると、2ページ目は21件目から40件目までの表示となり、10件目から20件目までの11件が表示から抜け落ちることになります。

    これを修正するには、offsetパラメーターをする必要があります。

    aki

    (@akistar02)

    ありがとうございます。
    なんとなくおっしゃっていることは理解した気がします。

    ソースです。
    query_posts を使用しています。

    参考サイトなどご存じないでしょうか。
    ちょっと件数を変えるのは初めてで書き方がわかっていません。

    自分でも調べてみます。

    <?php         
    
    $paged = get_query_var( 'paged' );
    if (!$paged){
    	$pager = 9;
    }else{
    	$pager = 20;
    }
    
    $args = array(
    'posts_per_page' => $pager,
    'paged' => $paged
    
    );
    ?>
    <?php query_posts( $args ); ?>
    <?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
    
        <!--********************-->
      投稿内容
        <!--********************--> 
    
    <?php endwhile; ?>
    <?php endif; ?>
    
    <?php wp_reset_query(); ?>

    aki

    (@akistar02)

    書いてみました。
    1ページ目は9件、2ページ以降は20ページ表示という処理です。
    たぶん動いているのでほかの方の参考になればと思い記述しておきます。

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

    <?php         
    
    $paged = get_query_var( 'paged' );
    $post_num = $wp_query->found_posts;
    $all_pager = $wp_query->max_num_pages;
    $now_page = (get_query_var('paged')) ? get_query_var('paged') : 1;  
    
    if (!$paged){
    	$pager = 9;
    	$num = 1;
    }else{
    	$pager = 20;
    	$num = (($now_page - 1) * 20) - 11;
    }
    
    echo $num;
    $args = array(
    'posts_per_page' => $pager,
    'paged' => $paged,
    'offset' =>$num
    
    );
    ?>
    <?php query_posts( $args ); ?>
    <?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
    
        <!--********************-->
    
        <!--********************--> 
    
    <?php endwhile; ?>
    <?php endif; ?>
    
    <?php wp_reset_query(); ?>

    モデレーター jim912

    (@jim912)

    たぶん2点違います。

    1点目は、1ページ目のoffsetの指定値で、ここは0にしないと最新の1件が抜けてしまうはずです。

    2点目については、表示されるページャーの数です。

    ご希望の表示だと、ページ数と表示される記事の件数の関係は以下の通りとなります。

    1ページ目:1~9件目
    2ページ目:10~29件目
    3ページ目:30~59件目

    ここで、仮に記事数が20件あったとすると、1ページ目の表示件数指定は、9件となっているため、20を9で割った数の切り上げ、つまり3ページあると認識し、ページャーも3ページ目まで表示されることになります。
    しかしながら、2ページ目以降は、表示件数が20件となるため、実際は2ページ目までしかなく、3ページ目を表示しようとした際に、表示するものがないと出てしまうはずです

    これを解消するには、query_posts を行った直後に、$wp_query->max_num_pages の値を修正します。
    修正する内容は、$wp_query->found_posts に11(2ページ目以降の表示数と1ページ目の表示数の差)を足し、20で割った値の切り上げとなります。
    具体的なコードとしては、

    $wp_query->max_num_pages = ceil( ( $wp_query->found_posts + 11 ) / 20 );

    となるはずです。$wp_query->found_posts に適当な数字を当てはめてみて、上記のページのルールに合致するか確認してみてください。

    ※ $wp_queryはグローバル変数なので、関数内などでは認識きません。関数内で利用する場合は、global $wp_query; の宣言を行ってください。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「記事一覧の表示数」には新たに返信することはできません。