サポート » 使い方全般 » 新着情報でページナビゲーションの使い方。

  • 解決済 qpgawgaw

    (@qpgawgaw)


    ページナビゲーションが思うように動作せず、私のPHPの記述に問題があるのではないかと思います。
    ご指摘宜しくお願いします。

    現在、トップページに新着情報を10件ずつ表示して、ページナビゲーションでページ番号を付けています。
    新着情報の他にカテゴリーをもう一つ設けています。

    例えば新着情報が23件、他のカテゴリーが11件、計34件だとします。

    ページナビゲーションの動作が正常なら、トップページの新着情報のページ数は3ページで
    3ページ目に3件表示されるはずですが、ページ数が4ページ出ていて4ページ目を表示すると
    空の状態です。(3ページ目は3件表示しています)
    原因は、ページナビゲーションが他のカテゴリーの11件を認識しているが、私のPHPの記述が
    新着情報のみを表示させているため、空のページが出来てしまっていると思います。

    他のカテゴリーを認識しないようにすればいいと思い、色々と試しましたが上手くいきませんでした。
    根本的な記述のミスがあるのではないかと思います。

    下記にPHPのソースを載せましたので、ご指摘いただければと思います。

    宜しくお願いします。

    ————ソース————

    <?php get_header(); ?>
    
    <?php if(is_home()): ?> //トップページなら新着情報を表示
    <? query_posts('cat=1'); ?> //IDを1に指定
    <?php if(is_category('1')): ?>
    <h2>新着情報を表示 カテゴリーID1</h2>
    
    <?php
    query_posts($query_string . '&' .'showposts=10&category_name=news');
    if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
    <h2><?php the_time('Y.m.d') ?>
    <a>">
    <?php the_title(); ?></a></h2>
    
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>
    
    <?php endif; ?>
    <?php endif; ?>
    
    <?php if(is_category('6')): ?>
    <h2>カテゴリ6を表示 カテゴリーID1</h2>
    
    <?php
    query_posts($query_string . '&' .'showposts=0&category_name=products');
    if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
    <h2><?php the_time('Y.m.d') ?>
    <a>">
    <?php the_title(); ?></a></h2>
    
    <?php the_content()?>
    
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>
    <?php endif; ?>
    
    //↓ページナビゲーション
    <div class="tablenav"><?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' => 5,
    'current' => ($paged ? $paged : 1),
    )); ?></div>
    
    <?php get_footer(); ?>
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • ナビゲーションの作成方法に問題があります。
    クエリをリセットした後でトータルページ数を取得して指定しているので、本来のメインクエリのトータルページ数が指定されています。
    新着情報のクエリをリセットする前に’$wp_query->max_num_pages’を適当な変数に代入して、その変数をナビゲーションの’total’に指定するといいです。
     
    テキスト入力欄の上にある’code’ボタンでバッククォートが入力されます。
    これでコードを囲むようにすると読みやすいので、次回以降コードを記述する際に使用するようにしてください。

    トピック投稿者 qpgawgaw

    (@qpgawgaw)

    popupさん

    ご回答ありがとうございます。
    また、’code’ボタンについてご指摘ありがとうございます。
    今後コードを記述する際に使用します。

    popupさんのおかげで解決できました。

    私はPHPの全くの初心者でクエリリセットする前に’$wp_query->max_num_pages’を代入した変数を、最下部に記述していたページナビ部の’total’に指定するといったことが出来ませんでした。
    しかし「クエリをリセットした後で……トータルページ数が指定される」と仰ったところを参考にさせていただき、クエリリセット前にページナビを持っていけばいいと思い解決できました。(不細工なコードですが、下記コード参照してください)

    本当に助かりました。
    ありがとうございます。

    <?php get_header(); ?>
    
    <?php if(is_home()): ?> //トップページなら新着情報を表示
    <? query_posts('cat=1'); ?> //IDを1に指定
    <?php if(is_category('1')): ?>
    <h2>新着情報を表示 カテゴリーID1</h2>
    
    <?php
    query_posts($query_string . '&' .'showposts=10&category_name=news');
    if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
    <h2><?php the_time('Y.m.d') ?>
    <a>">
    <?php the_title(); ?></a></h2>
    
    <?php endwhile; endif; ?>
    
    //↓ページナビゲーション
    <div class="tablenav"><?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' => 5,
    'current' => ($paged ? $paged : 1),
    )); ?></div>
    
    //クエリリセット
    <?php wp_reset_query(); ?>
    
    <?php endif; ?>
    <?php endif; ?>
    
    <?php if(is_category('6')): ?>
    <h2>カテゴリ6を表示 カテゴリーID6 ページナビ必要なし</h2>
    
    <?php
    query_posts($query_string . '&' .'showposts=-1&category_name=products');
    if (have_posts()) : while (have_posts()) : the_post();
    ?>
    
    <h2><?php the_time('Y.m.d') ?>
    <a>">
    <?php the_title(); ?></a></h2>
    
    <?php the_content()?>
    
    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>
    <?php endif; ?>
    
    <?php get_footer(); ?>

    私はPHPの全くの初心者でクエリリセットする前に’$wp_query->max_num_pages’を代入した変数を、最下部に記述していたページナビ部の’total’に指定するといったことが出来ませんでした。

     
    新着情報のクエリをリセットする関数wp_reset_query()の前で変数に代入します。
    1回実行されれば十分ですので、ループ処理の終了後がいいでしょう。
     

    <?php endwhile; $pt = $wp_query->max_num_pages; endif; ?>
    <?php wp_reset_query(); ?>

     
    ページナビゲーションのコードは、質問投稿時の位置から移動しなくてもいいです。
     

    //'total' => $wp_query->max_num_pages, //ここを下のように変更
    'total' => $pt,

    トピック投稿者 qpgawgaw

    (@qpgawgaw)

    popupさん

    ありがとうございます。
    記述まで教えていただき大変感謝します。

    教えていただいた通り、

    <?php endwhile; endif; ?>
    <?php wp_reset_query(); ?>

    <?php endwhile; $pt = $wp_query->max_num_pages; endif; ?>
    <?php wp_reset_query(); ?>

    に変更し、ページナビゲーションのコードを、

    'total' => $pt,

    に変更することで、とってもスマートな記述になりました。

    大変勉強になりました。

    ありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「新着情報でページナビゲーションの使い方。」には新たに返信することはできません。