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

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

ただいまの
回答率

87.59%

カテゴリー一覧ページの2ページ目以降を表示するには?

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,779

score 12

前提・実現したいこと

WordPressの実装をしています。
カテゴリーのアーカイブページ(一覧ページ)のページ送りをした際にきちんと2ページ目以降もページが表示されるように実装したいです。

発生している問題

URLに『page/2/』等が入っている2ページ目以降の一覧ページが正常に表示されず、404エラーが表示されます。

該当のソースコード

category-works.phpを例に質問させてください。

<?php get_header(); ?>

<div id="works">
  <div class="container">
    <div class="row">
      <div class="eight columns">
        <div class="title clearfix">
        <img class="face" src="<?php echo get_template_directory_uri(); ?>/images/face.jpg" alt="face">
        <h1>タイトル</h1>
        </div>

     <div>
         <div class="clearfix">

      <?php 
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = Array(
               'category_name' => 'works',
               'post_type' => 'post',   
               'posts_per_page' => 3,   
               'paged' => $paged
            ); ?>

      <?php $wp_query = new WP_Query( $args ); ?>

      <?php if ( $wp_query->have_posts() ) : ?>

       <?php while ( $wp_query->have_posts() ) : ?>
        <?php $wp_query->the_post();  ?>

         <div class="works_box">
             <a href="<?php the_permalink(); ?>">
                 <?php the_post_thumbnail('thumbnail'); ?>
                 <div class="works-box-inner">
                     <div class="text-center">
                         <h3><?php the_title(); ?></h3>
                         <small><?php the_time('Y.m.d'); ?></small>
                         <span class="button-readmore">Read More</span>
                     </div>
                 </div>
             </a>
         </div>

      <?php endwhile; ?>
      </div>
      </div>
      <div class="clearfix">
           <div class="leftcol"><?php previous_posts_link('&lt; 前へ' ); ?></div>
           <div class="rightcol"><?php next_posts_link('次へ &gt;' ); ?></div>
        </div>
   </div>

   <?php wp_reset_postdata(); ?>
   <?php else: ?>
   <p>投稿はありません</p>
   </div>
   </div>
   </div>
   <?php endif; ?>

      <div class="four columns">
        <?php get_sidebar(); ?>
      </div>
    </div>
  </div>
</div>

<?php get_footer();


functions.phpに関係するコードは設定していません。
念の為、設定しているfunctions.phpを掲載します。(ほとんどほかのサイト様のコピペです)

<?php

/* the_archive_title 余計な文字を削除 */
add_filter( 'get_the_archive_title', function ($title) {
    if (is_category()) {
        $title = single_cat_title('',false);
    } elseif (is_tag()) {
        $title = single_tag_title('',false);
    } elseif (is_tax()) {
        $title = single_term_title('',false);
    } elseif (is_post_type_archive() ){
        $title = post_type_archive_title('',false);
    } elseif (is_date()) {
        $title = get_the_time('Y年n月');
    } elseif (is_search()) {
        $title = '検索結果:'.esc_html( get_search_query(false) );
    } elseif (is_404()) {
        $title = '「404」ページが見つかりません';
    } else {
        $title = '';
    }
    return $title;
});

// JS・CSSファイルを読み込む
function add_files() {
    // WordPress提供のjquery.jsを読み込まない
    wp_deregister_script('jquery');
    // jQueryの読み込み
    wp_enqueue_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js', "", "1.1.1", false );
    // サイト共通JS
    wp_enqueue_script( 'all-script', get_template_directory_uri() . '/js/all.js', array( 'jquery' ), '1.1.1', false );
    // サイト共通のCSSの読み込み
    wp_enqueue_style( 'normalize', get_template_directory_uri() . '/css/normalize.css', "", '1.1.1' );
    wp_enqueue_style( 'skelton', get_template_directory_uri() . '/css/skeleton.css', "", '1.1.1' );
    wp_enqueue_style( 'fontawesome', '//use.fontawesome.com/releases/v5.8.1/css/all.css', "", '1.1.1' ); 
    wp_enqueue_style( 'all-css', get_template_directory_uri() . '/style.css' , "", '1.1.1' ); 
}
add_action('wp_enqueue_scripts', 'add_files');

試したこと

① プラグインの導入
WP-PageNavi 試してもダメだったので、現在は停止しています。
FV Top Level Categories こちらも試してダメだったので、現在は停止しています。

② パーマリンク設定の確認・変更
/category/をURLに含ませるように試しましたが、なぜか3ページ目以降が表示されなかったです。

③ http://blog.yukarien.com/tech/how-to-fix-no-category-pagination/
上記URLの通りに確認しましたが、こちらを試しても改善されませんでした。

④ functions.phpへのリダイレクトを停止するコードの実装
http://blog.livedoor.jp/net_scope-diary/archives/25879219.html
上記URLを参考に実装しましたが、こちらも上手くいきませんでした…

補足情報

パーマリンク設定は「カスタム構造」で http://ドメイン/%category/%postname としています。
パーマリンクのオプション設定はしていません。
なお、固定ページに同様のスラッグ名がついたものは設定していません。

WordPress 5.1.1 
PHP7.2.6

どうぞ、よろしくお願いいたします!

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • marlboro_tata

    2019/04/19 19:21

    2、3前提を確認したいです。
    表示したいページは本当にこのphpファイル、works.php を読み込んでいますか?これは、カスタムテンプレートなのでしょうか。真っ当にカテゴリアーカイブを表示しているとしたら、URLは
    ドメイン/category/works/
    というようなものになり、2ページ目は
    ドメイン/category/works/page/2
    のようになると思います、そして、その時表示に関わっているテンプレートは
    category.php なり、 category-works.php なり、 archive.php というような名称のはずです。あまり難しいことを考えなければ、、ですが。
    ちなみに、
    ドメイン/?category_name=works&paged=2
    ドメイン/?category_name=works&paged=3
    ドメイン/?category_name=works&paged=4
    というURLを打ち込んだ場合、望み通りの挙動になりますか?

    キャンセル

  • nonoysng

    2019/04/19 19:28

    ご質問いただき、ありがとうございます。

    おっしゃる通り、テンプレート名は「category-works.php」です。

    URLは ドメイン/works/ となっています。どこかで「category」という文言を消しているのかと確認したのですが、私の現状の知識では良く理解できず…申し訳ないです。functions.phpを追記しますので、そちらもご確認いただければと思います。

    ドメイン/?category_name=works&paged=2 は思い通りの挙動になりましたが、ドメイン/?category_name=works&paged=3 , ドメイン/?category_name=works&paged=4 については思い通りになりませんでした。

    キャンセル

  • marlboro_tata

    2019/04/19 19:50

    承知しました。URLのことはいったん脇に置いておいて、
    ・worksのカテゴリだけ一覧は3件づつの表示
    ・ページングを正常に
    ということと整理しまして。
    ちなみに、
    ドメイン/?category_name=works&paged=2
    と入力した後に、URLが変更されたりしていないでしょうか?
    ドメイン/works/page/2
    と変化しますか?

    キャンセル

  • nonoysng

    2019/04/19 19:51

    ありがとうございます!

    ドメイン/category/works/page/2/
    と変化します。

    キャンセル

回答 1

checkベストアンサー

+1

category-works.php の一部を下記のように書き換え

//省略
         <div class="clearfix">

      <?php if ( have_posts() ) : ?>
      <?php while ( have_posts() ) : the_post();?>

         <div class="works_box">
//省略

functions.php に下記を追加

function pre_get_posts_custom( $query ) {
    if( is_admin() || ! $query->is_main_query() ){
        return;
    }
    if( $query->is_category( 'works' ) ){
        $query->set( 'posts_per_page' , 3 );
    }

}
add_action( 'pre_get_posts', 'pre_get_posts_custom' );

こちらで、とりあえず、
ドメイン/category/works/page/3
が思い通りの挙動にならないでしょうか?

ページングがうまくいった上で、おそらく、URLから /category/ を取りたいのだと思いますが、
その場合はプラグインで解決できるかもしれません。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/19 22:12

    承知いたしました!
    本当にご丁寧に教えていただき、ありがとうございました!

    キャンセル

  • 2019/04/19 22:33

    ご報告です。
    URLから /category/ を除くのはNo Category Base (WPML)というプラグインでできました。
    ありがとうございました。

    また、3つ目のみ少し下にずれた表示になる現象ですが、
    コードの一部に全角スペースが入ってしまっていたために表示がずれていたことがわかりました。

    marlboro_tataさん、ありがとうございました!

    キャンセル

  • 2019/04/21 09:34

    よかったです〜。

    キャンセル

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

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

関連した質問

同じタグがついた質問を見る