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

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

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

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

PHP

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

ページネーション

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

Q&A

1回答

2991閲覧

taxonomy-{news}.phpのページネーションの2ページ目以降が404になる

tomtom199

総合スコア10

WordPress

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

PHP

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

ページネーション

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

0グッド

0クリップ

投稿2020/05/18 14:42

前提として
WPでの制作は初めてです。言葉足らずだったり説明が分かりづらかったりしますが、宜しくお願いします。

実現したいこと
taxonomy-news.phpのページネーションをプラグインなしで実装したいです。

カスタム投稿タイプ名: blog
タクソノミー名: news
ターム: IT, 考察, 自動車..etc (投稿する記事内容に応じて増えていく予定)

このページにカテゴリー一覧のようにターム毎の記事一覧を表示させたいですが、2ぺージ目以降のURL(http://localhost:8888/WP/ドメイン名/news/タームのスラッグ名/page/2)を直接ブラウザに入力したり、2ぺージ目の番号をクリックしても404が吐き出されます。なので、まず2ぺージ目以降のURLが存在してない所までは分かりました。

ターム毎の記事一覧ページのページネーションについて調べていると、『pre_get_postsがいい。』と書いてある記事(__**https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88**__)を見たのでfunctions.php に追加しましたが、その後、そのコードをどのように使ったらいいか分からず苦戦しています。

その他事前の設定としては、
「フロントページの表示」には固定ページを設定

該当のソースコード

/*---------- taxonomy-news.php -------------*/ <?php $paged = get_query_var('paged') ? get_query_var('paged') : 1 ; $type = get_query_var('news'); $args = array( 'post_type' => 'blog', 'tax_query' => array( // 'relation' => 'OR', array( 'taxonomy' => 'news', 'field' => 'slug', 'terms' => $type, ), ), 'paged' => $paged, 'posts_per_page' => '1', ); $my_query = new WP_Query($args); $max_num_pages = $my_query->max_num_pages; ?> <pre>$my_query->max_num_pages:<?php print_r($my_query -> max_num_pages); ?></pre> <?php $my_query = new WP_Query( $args ); ?> <?php if ( $my_query->have_posts() ) : ?> <?php while ( $my_query->have_posts()) : $my_query->the_post(); ?> /*---------- 記事一覧表示ループ ----------*/ <?php endwhile; endif; ?> <?php if (function_exists('responsive_pagination')) { responsive_pagination($max_num_pages); } ?> <?php wp_reset_postdata(); wp_reset_query(); ?>
ソースコード

試したこと

例)ターム『考察』の投稿数は合計7。

1) WP => 設定 => 表示設定 => 1ページに表示する最大投稿数を『1』に設定
2) 'posts_per_page' => '1'にして、

<pre>$my_query->max_num_pages:<?php print_r($my_query -> max_num_pages); ?></pre>

上記のコードのサブループで設定した値を確認した結果、ターム『考察』一覧ページでは『7』が出力され、ページネーションも7ぺージまで表示される

また、
1) WP => 設定 => 表示設定 => 1ページに表示する最大投稿数を『2』に設定
2) 'posts_per_page' => '2'にして、

<pre>$my_query->max_num_pages:<?php print_r($my_query -> max_num_pages); ?></pre>

上記のコードのサブループで設定した値を確認した結果、ターム『考察』一覧ページでは『4』が出力され、ページネーションも4ぺージまで表示される

/*---------- functions.php -------------*/ https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88 //////////////// function custom_query($query) { if ( is_admin() || !$query->is_main_query() ) return; if ( $query-> is_tax('news') ) { $query->set('posts_per_page', '2'); return; } } add_action( 'pre_get_posts', 'custom_query' ); /*---------- pagination ----------*/ function responsive_pagination($pages = '', $range = 4){ $showitems = ($range * 2)+1; global $paged; if(empty($paged)) $paged = 1; //ページ情報の取得 if($pages == '') { global $wp_query; $pages = $wp_query->max_num_pages; if(!$pages){ $pages = 1; } } if(1 != $pages) { echo '<ul class="pagination" role="menubar" aria-label="Pagination">'; //先頭へ echo '<li class="first"><a href="'.get_pagenum_link(1).'"><span>First</span></a></li>'; //1つ戻る echo '<li class="previous"><a href="'.get_pagenum_link($paged - 1).'"><span>Previous</span></a></li>'; //番号つきページ送りボタン for ($i=1; $i <= $pages; $i++) { if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) { echo ($paged == $i)? '<li class="current"><a>'.$i.'</a></li>':'<li><a href="'.get_pagenum_link($i).'" class="inactive" >'.$i.'</a></li>'; } } //1つ進む echo '<li class="next"><a href="'.get_pagenum_link($paged + 1).'"><span>Next</span></a></li>'; //最後尾へ echo '<li class="last"><a href="'.get_pagenum_link($pages).'"><span>Last</span></a></li>'; echo '</ul>'; } }

参考にしたサイト

https://qiita.com/_ruka_/items/e14280d34eddf49efad1#pre_get_posts%E3%81%AE%E3%81%94%E6%8F%90%E6%A1%88

https://xtra-blog.net/pagination/

https://lib.ridesign.jp/lib_wp/wp02/

投稿ぺージ、カスタム投稿ぺージ、カテゴリー一覧ページでは、ページネーションがしっかり表示され2ぺージ目以降にも飛びますが、このターム毎の記事一覧ページではうまく反映されずに苦戦しているので、ここに質問させていただきました。
宜しくお願いします。

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

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

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

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

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

guest

回答1

0

pre_get_postsフックを使うなら、new WP_Queryをtaxonomy-news.phpに書く必要はありません。
通常のループにしましょう。

PHP

1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 2 <!-- 投稿 --> 3<?php endwhile; else: ?> 4 <!-- 投稿がない --> 5<?php endif; ?>

投稿2020/05/18 16:04

kei344

総合スコア69407

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

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

tomtom199

2020/05/18 20:25

kei344さん ご回答ありがとうございます。 アドバイスを頂いた通り、コードを修正し、プラス<?php query_posts( $args ); ?> <!-- query_postsをget_posts に変更して-->追加しましたが、2ぺージ目以降のURLは変わらず404が出力されたので、逆に『pre_get_postsフック』をコメントアウトして、『new WP_Query』をtaxonomy-news.phpに書いて試してみましたが、これも2ぺージ目以降のURLは変わらず404が出力されてしまいました... パーマリンクは『投稿名』で設定していて、空のまま変更保存してまた戻したりしましたが、これもダメでした。 2ぺージ目以降のURLが存在してないことが原因だと思ったのですが、リンク設定がおかしいのでしょうか?
kei344

2020/05/19 03:49 編集

paginate_links を使ってリンクを出力してみてください。その上で、表示される場合は、そのリンクURLがご自身で書かれたページャのURLとどう違うか確認してみてください。表示されないなら何らかのほかの原因があると思います。デフォルトテーマに一度戻して、そのページが表示されるか確認してみてください。 【paginate_links – WordPress私的マニュアル】 https://elearn.jp/wpman/function/paginate_links.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問