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

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

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

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

PHP

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

Q&A

解決済

1回答

2710閲覧

WordPressのページネーションで2ページ目以降表示が切り替わらない

goldenb

総合スコア29

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/09/17 12:36

編集2020/09/17 16:35

WordPressの投稿一覧画面でページネーションを実装したいのですが2ページ目以降の記事に切り替わらず困っております。
URLはhttp://ドメイン/news/?pages=2と変わるのですが記事は1ページ目のままでカレントも1のままです。
WP_Query を使用せずに通常のループにして、ページネーションの部分に、the_posts_pagination 関数を使用する等の解説ページを見たのですが具体的にどこのコードを変えればいいのか解らず試せていません。
ご教授のほどお願いいたします。

php

1//archive-news.php 2<ul class="news-list"> 3 <?php 4 $args = array( 5 'post_type' => 'post', 6 'posts_per_page' => 2 7 ); 8 $the_query = new WP_Query( $args ); 9 ?> 10 <?php if ( $the_query->have_posts() ): ?> 11 <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 12 <li class="news-item"> 13 <a href="<?php the_permalink(); ?>"> 14 <p class="date"><?php echo get_the_date('Y.m.d'); ?></p> 15 <h3 class="title"><?php the_title(); ?></h3> 16 </a> 17 </li> 18 <?php endwhile; ?> 19</ul> 20<?php custom_pagination($the_query, 2); ?> 21<?php else : ?> 22<p>表示できる記事がありません</p> 23<?php endif; wp_reset_postdata(); ?>

php

1//function.php 2function custom_pagination($the_query, $next_prev_num = 2){ 3 $posts_per_page = $the_query->query['posts_per_page']; 4 $current_page = (int)$the_query->query['offset'] / $posts_per_page + 1; 5 6 $page_final = ceil(($the_query->found_posts) / $posts_per_page); 7 $paging_start = ($current_page - $next_prev_num) > 0 ? ($current_page - $next_prev_num) : 1; 8 $paging_end = ($current_page + $next_prev_num) < $page_final ? ($current_page + $next_prev_num) : $page_final; 9 10 if($page_final == 1) return false; 11 12 if($paging_start + ($next_prev_num * 2) >= $page_final){ 13 $paging_start = $paging_start - abs(($page_final - ($paging_start + $next_prev_num)) - $next_prev_num); 14 if($paging_start <= 0) $paging_start = 1; 15 } 16 if($paging_end - ($next_prev_num * 2 + 1) <= 0){ 17 $paging_end = $paging_end + abs($paging_end - ($next_prev_num * 2 + 1)); 18 if($paging_end > $page_final) $paging_end = $page_final; 19 } 20 21 echo '<div class="pager">'."\n"; 22 echo '<ul class="pager-list">'."\n"; 23 for($pages = $paging_start; $pages <= $paging_end; $pages++){ 24 if($pages == $paging_start){ 25 if($paging_start > 1) echo '<li class="pager-first"><a href="'. add_query_arg('pages', 1) .'">FIRST</a></li>'."\n"; 26 if($current_page != 1) echo '<li class="pager-prev"><a href="'. add_query_arg('pages', $current_page - 1) .'">PREV</a></li>'."\n"; 27 } 28 29 if($current_page == $pages){ 30 echo '<li><span>'. $pages .'</span></li>'."\n"; 31 }else{ 32 echo '<li><a href="'. add_query_arg('pages', $pages) .'">'. $pages .'</a></li>'."\n"; 33 } 34 35 if($pages == $paging_end){ 36 if($current_page != $page_final) echo '<li class="pager-next"><a href="'. add_query_arg('pages', $current_page + 1) .'">NEXT</a></li>'."\n"; 37 if(($page_final - $next_prev_num) > $current_page) echo '<li class="pager-last"><a href="'. add_query_arg('pages', $page_final) .'">LAST</a></li>'."\n"; 38 } 39 } 40 echo '</ul>'."\n"; 41 echo '</div>'."\n"; 42}

一覧ページを固定ページに変更してみたりしましたが2ページ目が表示されずです...

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下で正常に動作するかはわかりませんが、
ひとまずposts_per_pageは、1ページあたり何記事表示するかを決めるオプションなので、
今現在が何ページであるかの情報をWP_Queryに渡せていません。

pagedを使って、現在のページを渡してください。

diff

1 2<?php 3+ $paged = (get_query_var('pages')) ? get_query_var('pages') : 1; 4 $args = array( 5 'post_type' => 'post', 6 'posts_per_page' => 2, 7+ 'paged' => $paged, 8 ); 9 $the_query = new WP_Query( $args ); 10

2020/08/18追記
確認しましたところ、get_query_var()は独自のクエリ変数には初期状態では対応していないようです。

get_query_var() は WP_Query で認識されている「パブリック・クエリ変数」のみを取得します。言い換えれば、独自のクエリ変数でカスタム URL を作成したのみで追加処理(以下参照)を伴わない場合 get_query_var() はそういったクエリ変数を取得できません。

なので、
クエリ変数をpagedに変更するか、
取得方法をget_query_varに独自クエリを追加するか、
クエリの取得方法を変える
という3つの方法がありそうです。

3つ目の物の場合、以下のような記述に変えると動作するのではないでしょうか。

diff

1-$paged = (get_query_var('pages')) ? get_query_var('pages') : 1; 2+$paged = filter_input(INPUT_GET, "pages", FILTER_VALIDATE_INT) ?? 1;

投稿2020/09/17 14:27

編集2020/09/18 01:31
hayato7

総合スコア1135

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

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

goldenb

2020/09/17 15:48

ご回答ありがとうございます。 ご指摘いただいた部分を修正しましたがページは切り替わりませんでした。 URLは?pages=2と切り替わっているのに表示は変わらないというのは何が原因なのでしょうか... また何かお気づきになられましたらご教授お願いいたします。
hayato7

2020/09/18 01:31

追記いたしました。
goldenb

2020/09/18 02:03 編集

調べていただきありがとうございます! 表示は切り替わるようになりました。ありがとうございます。 あとページネーションのカレントが切り替わらない状態は改善されずです。 function.phpに書いているのに問題があるのでしょうか?
hayato7

2020/09/18 04:22 編集

詳しく追っていませんが、 $current_page = (int)$the_query->query['offset'] / $posts_per_page + 1; この$current_pageは現在のページ数という意味だと思うので、 追記でのせた filter_input(INPUT_GET, "pages", FILTER_VALIDATE_INT) ?? 1; を入れたらとりあえず正しい値が取れると思います。
goldenb

2020/09/18 04:29

ご回答いただいた方法で正しく動作しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問