質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.50%

【wordpress】ページネーションが機能しない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 463

KyokoKawamoto

score 12

投稿記事の一覧(アーカイブ)ページを作成したのですが、blog/page/2/や/3/が1ページ目と同じ画面になってしまいます。また、1ページに5記事表示したいのですが、'posts_per_page' => 5が効かず3記事の表示になります。

どなたか解決方法を教えてください。よろしくお願いします。

(archive.php):テンプレートにして固定ページでアーカイブページを作成

<?php /*
Template Name: ブログ
*/ ?>

<?php get_header(); ?>

<div id="content02">
<div id="content">

<div class="wrap">

  <div id="main" <?php bzb_layout_main(); ?> role="main" itemprop="mainContentOfPage" itemscope="itemscope" itemtype="http://schema.org/Blog">
    <div class="main-inner">

    <div class="page-header">
    <h1 class="post-title" ><?php bzb_title(); ?></h1>
    </div>

    <div class="post-loop-wrap">



<?php
    $paged = get_query_var('paged') ? get_query_var('paged') : 1 ;
        $args = array(
        'post-type' => 'post',
        'posts_per_page' => 5,
        'paged' => $paged
    );
    $my_query = new WP_Query($args);
?>
<?php
    if( $my_query -> have_posts() ) :
        while($my_query -> have_posts()) : $my_query -> the_post();
?>


    <article id="post-<?php echo the_ID(); ?>" <?php post_class(); ?> itemscope="itemscope" itemtype="http://schema.org/BlogPosting">

      <header class="post-header">
        <div class="cat-name">
          <span>
            <?php
              $category = get_the_category();
              echo $category[0]->cat_name;
            ?>
          </span>
        <ul class="post-meta list-inline">
          <li class="date" itemprop="datePublished" datetime="<?php the_time('c');?>"><i class="fa fa-clock-o"></i> <?php the_time('Y.m.d');?></li>
        </ul>
        </div>
        <h1 class="post-title" itemprop="headline"><?php the_title(); ?></h1>
        <div class="post-sns">
          <?php bzb_social_buttons();?>
        </div>
      </header>

      <section class="post-content" itemprop="text">
        <?php the_excerpt(); ?>
      </section>

      <footer class="post-footer">
        <a class="morelink" href="<?php the_permalink(); ?>" rel="nofollow">続きを読む ≫</a>
      </footer>
    </article>



    <?php
                endwhile;
            else :
        ?>

    <article id="post-404"class="cotent-none post" itemscope="itemscope" itemtype="http://schema.org/BlogPosting">
      <section class="post-content" itemprop="text">
        <?php echo get_template_part('content', 'none'); ?>
      </section>
    </article>
    <?php
            endif;
        ?>

<?php if (function_exists("pagination")) {
    pagination($wp_query->max_num_pages);
} ?>


<?php wp_reset_postdata(); wp_reset_query(); ?>

    </div><!-- /post-loop-wrap -->



    </div><!-- /main-inner -->    
  </div><!-- /main -->

<?php get_sidebar(); ?>

</div><!-- /wrap -->

</div><!-- /content -->
</div><!-- /content02 -->

<?php get_footer(); ?>

 追加質問

per_get_postsを使って固定ページに表示することができたのですが、
投稿記事の一覧ではなく、この固定ページのタイトル「ブログ一覧」の1つのみ表示されてしまいました。
この場合はどこを修正したら良いのでしょうか?

/* functions.php */

function change_posts_per_page($query) {

if ( is_admin() || ! $query->is_main_query() ){
     return;
 }

 if ( $query->is_archive() ) {
     $query->set( 'posts_per_page', '5' );
     return;
 }

}
add_action( 'pre_get_posts', 'change_posts_per_page' );
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

関数paginationの実装方法によりますね。(WordPressの関数ではないはず)

【paginate_links – WordPress私的マニュアル】
https://elearn.jp/wpman/function/paginate_links.html

アーカイブ系テンプレート上でWP_Queryを使用するのではなく、pre_get_postsでクエリを調整するほうがよいと思います。

【pre_get_postsでメインクエリを制御する | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/cms/post9420.html

【【wordpress】pre_get_postsを使ってみませんか?】
https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_postsのご提案

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/18 00:54

    ご回答ありあとうございます。
    WP_Queryの使用をやめ、pre_get_postsを使用したのですが、一覧の表示が変わってしまいます。
    この場合はどのように対処するべきでしょうか?
    上記質問の詳細を追記しましたので、もし解決方法が分かりましたら教えてください。

    キャンセル

  • 2018/10/18 01:21 編集

    まず、固定ページを利用している時点で「is_archive()」での判定はfalseになります。固定ページのどのページか、まで確認して分岐する必要があります。

    【is_archive – WordPress私的マニュアル】
    https://elearn.jp/wpman/function/is_archive.html

    【is_page – WordPress私的マニュアル】
    https://elearn.jp/wpman/function/is_page.html


    pre_get_posts については入り口のみを提示したので、とても不親切でした、すみません。
    元々固定ページとしてルーティングされているので、固定ページのidとかスラッグが代入されているはずです。それを目的のアーカイブに合わせて全て編集する必要があります。

    【WP_Queryの使い方をPHPコードにまとめた便利なコード・スニペット】
    http://notnil-creative.com/blog/archives/1288

    少なくとも 'p' name' 'page_id' 'pagename' を '' にして、'post_type' を記事なら 'post' カスタム投稿ならスラッグを指定する必要があるでしょう。


    記事を特定ディレクトリ以下に配置するには、カスタム投稿タイプで作ってしまうのが問題も起き難くコントロールしやすいので私ならその方法をとります。(この紹介も「入り口のみを提示」程度です)

    【Custom Post Type UIの使い方[WordPress]】
    http://kotori-blog.com/wordpress/custom_post_type_ui/

    【カスタム投稿タイプのパーマリンクを変更する『Custom Post Type Permalinks』 | ワードプレステーマTCD】
    https://design-plus1.com/tcd-w/2016/02/customposttypepermalinks.html

    キャンセル

  • 2018/10/18 04:06

    ご回答ありがとうございます。
    元々は特定のディレクトリ以下に配置をしたかったため、カスタム投稿タイプでの作成を行いました。
    per_get_postsを使った記載でページネーションも正常に作動することができました!
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる