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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

1回答

9400閲覧

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

nonoysng

総合スコア12

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2019/04/19 09:48

編集2019/04/19 10:33

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

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

#該当のソースコード
category-works.phpを例に質問させてください。

PHP

1<?php get_header(); ?> 2 3<div id="works"> 4 <div class="container"> 5 <div class="row"> 6 <div class="eight columns"> 7 <div class="title clearfix"> 8 <img class="face" src="<?php echo get_template_directory_uri(); ?>/images/face.jpg" alt="face"> 9 <h1>タイトル</h1> 10 </div> 11 12     <div> 13  <div class="clearfix"> 14 15      <?php 16        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 17        $args = Array( 18          'category_name' => 'works', 19        'post_type' => 'post', 20        'posts_per_page' => 3, 21        'paged' => $paged 22            ); ?> 23 24      <?php $wp_query = new WP_Query( $args ); ?> 25 26      <?php if ( $wp_query->have_posts() ) : ?> 27 28     <?php while ( $wp_query->have_posts() ) : ?> 29     <?php $wp_query->the_post(); ?> 30 31   <div class="works_box"> 32  <a href="<?php the_permalink(); ?>"> 33   <?php the_post_thumbnail('thumbnail'); ?> 34  <div class="works-box-inner"> 35  <div class="text-center"> 36  <h3><?php the_title(); ?></h3> 37  <small><?php the_time('Y.m.d'); ?></small> 38  <span class="button-readmore">Read More</span> 39   </div> 40   </div> 41  </a> 42  </div> 43 44      <?php endwhile; ?> 45      </div> 46      </div> 47      <div class="clearfix"> 48    <div class="leftcol"><?php previous_posts_link('&lt; 前へ' ); ?></div> 49    <div class="rightcol"><?php next_posts_link('次へ &gt;' ); ?></div> 50   </div> 51   </div> 52 53   <?php wp_reset_postdata(); ?> 54   <?php else: ?> 55   <p>投稿はありません</p> 56   </div> 57   </div> 58   </div> 59   <?php endif; ?> 60 61 <div class="four columns"> 62 <?php get_sidebar(); ?> 63 </div> 64 </div> 65 </div> 66</div> 67 68<?php get_footer();

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

PHP

1 2<?php 3 4/* the_archive_title 余計な文字を削除 */ 5add_filter( 'get_the_archive_title', function ($title) { 6 if (is_category()) { 7 $title = single_cat_title('',false); 8 } elseif (is_tag()) { 9 $title = single_tag_title('',false); 10 } elseif (is_tax()) { 11 $title = single_term_title('',false); 12 } elseif (is_post_type_archive() ){ 13 $title = post_type_archive_title('',false); 14 } elseif (is_date()) { 15 $title = get_the_time('Y年n月'); 16 } elseif (is_search()) { 17 $title = '検索結果:'.esc_html( get_search_query(false) ); 18 } elseif (is_404()) { 19 $title = '「404」ページが見つかりません'; 20 } else { 21 $title = ''; 22 } 23 return $title; 24}); 25 26// JS・CSSファイルを読み込む 27function add_files() { 28 // WordPress提供のjquery.jsを読み込まない 29 wp_deregister_script('jquery'); 30 // jQueryの読み込み 31 wp_enqueue_script( 'jquery', '//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js', "", "1.1.1", false ); 32 // サイト共通JS 33 wp_enqueue_script( 'all-script', get_template_directory_uri() . '/js/all.js', array( 'jquery' ), '1.1.1', false ); 34 // サイト共通のCSSの読み込み 35 wp_enqueue_style( 'normalize', get_template_directory_uri() . '/css/normalize.css', "", '1.1.1' ); 36 wp_enqueue_style( 'skelton', get_template_directory_uri() . '/css/skeleton.css', "", '1.1.1' ); 37 wp_enqueue_style( 'fontawesome', '//use.fontawesome.com/releases/v5.8.1/css/all.css', "", '1.1.1' ); 38 wp_enqueue_style( 'all-css', get_template_directory_uri() . '/style.css' , "", '1.1.1' ); 39} 40add_action('wp_enqueue_scripts', 'add_files'); 41

#試したこと
① プラグインの導入
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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marlboro_tata

2019/04/19 10: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 10: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 10:50

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

2019/04/19 10:51

ありがとうございます! ドメイン/category/works/page/2/ と変化します。
guest

回答1

0

ベストアンサー

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

PHP

1//省略 2  <div class="clearfix"> 3 4      <?php if ( have_posts() ) : ?> 5      <?php while ( have_posts() ) : the_post();?> 6 7   <div class="works_box"> 8//省略

functions.php に下記を追加

PHP

1function pre_get_posts_custom( $query ) { 2 if( is_admin() || ! $query->is_main_query() ){ 3 return; 4 } 5 if( $query->is_category( 'works' ) ){ 6 $query->set( 'posts_per_page' , 3 ); 7 } 8 9} 10add_action( 'pre_get_posts', 'pre_get_posts_custom' ); 11

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

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

投稿2019/04/19 11:07

marlboro_tata

総合スコア525

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonoysng

2019/04/19 12:42

ご回答いただき、ありがとうございます! とりあえずではありますが、「ドメイン/category/works/page/3」の挙動が思い通りなものになりました! 今回、表示させたい3つを以下のように並べたいと考えているのですが、ご教授いただいたコードを実行したところ、3つ目のみ少し下にずれた表示になりました。 これは、何が影響しているのでしょうか? <表示させたい3つの項目> □  □  □ <実行後の現状> □  □       □
marlboro_tata

2019/04/19 12:53

>3つ目のみ少し下にずれた表示になりました。 そ、それは、実際のコードを見てみないと何とも、申し上げられませんです・・・。 ページングの、全てのページで同じような状況になりますか?
nonoysng

2019/04/19 12:56

申し訳ございません…。 はい、ページングの全てのページで同じような状況になっています。
marlboro_tata

2019/04/19 13:00

本来の質問とは違う内容の質問であると思いますので、改めて質問を立てるのはいかがでしょうか? 実際にブラウザに表示されているページのHTMLとCSSを見ないと、解決が難しいと存じます。
nonoysng

2019/04/19 13:12

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

2019/04/19 13:33

ご報告です。 URLから /category/ を除くのはNo Category Base (WPML)というプラグインでできました。 ありがとうございました。 また、3つ目のみ少し下にずれた表示になる現象ですが、 コードの一部に全角スペースが入ってしまっていたために表示がずれていたことがわかりました。 marlboro_tataさん、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問