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

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

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

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

PHP

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

Q&A

解決済

1回答

397閲覧

wordpressのページネーションで2ページ目が表示されない

snafkin999

総合スコア25

WordPress

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

PHP

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

0グッド

0クリップ

投稿2023/02/09 17:24

編集2023/02/09 17:30

実現したいこと

投稿一覧ページでページネーションを正常に動作させたい。
原因と対策がしりたいです。

前提

wordpress6.1.1にてプラグインを使わずページネーションを実装中です。
同様の問題を抱えている人のページは探索済み

発生している問題・エラーメッセージ

ページネーションの表示自体は上手くいくが
2ページ目以降のリンクを踏むとTOPページに飛ばされてしまいます。

該当のソースコード

wordpress

1<div class="tl-NewsList__wrapper"> 2 <ul class="tl-NewsList__items"> 3 <?php 4 $args = array( 5 'post_type' => 'post', 6 'posts_per_page' => 4, 7 'order' => 'DESC', 8 'paged' => $paged, 9 ); 10 $the_query = new WP_Query($args); 11 ?> 12<?php if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?> 13 14 // 記事一覧のソースが入る 15 <?php endwhile; ?> 16 </ul> 17 18// ここからページネーションの処理 19 <?php 20 global $wp_rewrite; 21 $paginate_base = get_pagenum_link(1); 22 if (strpos($paginate_base, '?') || !$wp_rewrite->using_permalinks()) { 23 $paginate_format = ''; 24 $paginate_base = add_query_arg('paged', '%#%'); 25 } else { 26 $paginate_format = (substr($paginate_base, -1, 1) == '/' ? '' : '/') . 27 user_trailingslashit('page/%#%/', 'paged');; 28 $paginate_base .= '%_%'; 29 } 30 if ($wp_query->max_num_pages > 1) { 31 $page_links = paginate_links(array( 32 'base' => $paginate_base, 33 'format' => $paginate_format, 34 'total' => $wp_query->max_num_pages, 35 'mid_size' => 1, 36 'type' => 'array', 37 'current' => ($paged ? $paged : 1), 38 'prev_text' => '前へ', 39 'next_text' => '次へ', 40 )); 41 if (strpos($page_links[0], 'prev page-numbers') === false) { 42 array_unshift($page_links, '<span class="prev page-numbers">前へ</span>'); 43 } 44 if (strpos($page_links[count($page_links) - 1], 'next page-numbers') === false) { 45 array_push($page_links, '<span class="next page-numbers">次へ</span>'); 46 } 47 $r = ''; 48 $r .= "<div class='pagination'>\n\t"; 49 $r .= join("\n\t", $page_links); 50 $r .= "\n</div>\n"; 51 echo $r; 52 } else { 53 echo '<div class="page-numbers">'; 54 echo ' <span href="#" class="prev page-numbers">&lt;</span>'; 55 echo ' <span class="page-numbers current">1</span>'; 56 echo ' <span href="#" class="next page-numbers">&gt;</span>'; 57 echo '</div>'; 58 } 59 ?> 60<?php endif; ?> 61</div>

投稿ページの名称を変更しています

function.php

1/** 2 * 投稿ページのパーマリンクをカスタマイズ 3 */ 4function post_has_archive($args, $post_type) { 5 if ('post' == $post_type) { 6 $args['rewrite'] = true; 7 $args['has_archive'] = 'info'; //任意のスラッグ名 ←アーカイブページを有効に 8 $args['label'] = 'お知らせ'; //管理画面左ナビに「投稿」の代わりに表示される 9 } 10 return $args; 11} 12add_filter('register_post_type_args', 'post_has_archive', 10, 2); 13add_filter('post_type_archive_link', function ($link, $post_type) { 14 if ('post' === $post_type) { 15 $post_type_object = get_post_type_object('post'); 16 $slug = $post_type_object->has_archive; 17 $link = get_home_url(null, '/' . $slug . '/'); 18 } 19 return $link; 20}, 10, 2); 21function add_article_post_permalink($permalink) { 22 $permalink = '/info' . $permalink; 23 return $permalink; 24} 25add_filter('pre_post_link', 'add_article_post_permalink'); 26function add_article_post_rewrite_rules($post_rewrite) { 27 $return_rule = array(); 28 foreach ($post_rewrite as $regex => $rewrite) { 29 $return_rule['info/' . $regex] = $rewrite; 30 } 31 return $return_rule; 32} 33add_filter('post_rewrite_rules', 'add_article_post_rewrite_rules');

試したこと

Rewrite Rules Inspectorツールで上書き処理を追加 → ダメ
管理画面で最大表示投稿数を1にするなど↓こちらの対策は全て試しましたがダメでした
https://webimemo.com/wordpress/1813

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

vabo

2023/02/10 00:45

トップページに飛んでしまう2ページ目のURLはどのようになっていますか? また、$args = array(の前(一個めのソースコードの三行目と四行目の間)に $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; を付け足すとどうなりますか?
snafkin999

2023/02/10 09:34

返信遅くなり申し訳ありません。 2ページ目のURLはhttp://test.com/info/page/2/となっています。 教えていただいたコードを付け足してみましたが特に変わりませんでした。
guest

回答1

0

ベストアンサー

ページネーション以外の部分を以下に置き換えても同じエラーが出ますか?

PHP

1<?php 2if ( have_posts() ) : 3 while ( have_posts() ) : the_post(); 4 the_title(); 5 endwhile; 6else : 7 echo wpautop( '投稿が見つかりませんでした。' ); 8endif; 9?>

エラーが出なくなった場合は、このコードとpre_get_postsを使うのがいいと思います。

投稿2023/02/22 07:38

tritree

総合スコア24

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

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

snafkin999

2023/02/22 10:22

ありがとうございます!うまくいきました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.54%

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

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

質問する

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

WordPress

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

PHP

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