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

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

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

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

PHP

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

Q&A

解決済

1回答

1077閲覧

【wordpress】archive-○○.phpでカスタム投稿の2ページ目以降がindex.phpの内容になってしまう

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/02/03 08:18

前提・実現したいこと

archive-○○.phpに、カスタム投稿の内容をWP_Query(サブループ)で表示しています。

paginate_linksでページャーを表示しているのですが、2ページ目以降が、index.phpの内容で表示されてしまいます。
↑URLはdomain/news/page/2のようにちゃんと変わっています。

どのサイトを見ても、「2ページ目以降が404」の時どうすればいいかという内容しか書いておらず、
「2ページ目以降がindex.phpの内容が表示される」時はどうすればいいかを説明しているサイトが見つかりませんでした。

ご教授のほどお願い致します。

※wp管理画面のパーマリンクは更新してから表示確認をしています。

archive-news.php

<?php global $max_num_page; $paged = get_query_var('paged') ? get_query_var('paged') : 1; $args = array( 'post_type' => 'news', 'posts_per_page' => 2, 'orderby' => 'date', 'order' => 'DESC', 'paged' => $paged, ); $the_query = new WP_Query( $args ); while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <!--ここにループの中の記述 --> <?php endwhile; wp_reset_postdata(); ?> <?php if ($the_query->max_num_pages > 1) { echo '<div class="pagination">'; echo paginate_links( array( 'base' => get_pagenum_link(1).'%_%', 'format' => 'page/%#%/', 'current' => max(1, $paged), 'total' => $the_query->max_num_pages, 'type' => 'list', 'mid_size' => '1', 'prev_text' => '<', 'next_text' => '>' ) ); echo '</div>'; } ?>

functions.php

// ================================================================================ // カスタム投稿関係 // ================================================================================ /*** * * カスタム投稿定義 * ***/ function my_add_post_type() { register_post_type( 'news', array( 'label' => 'お知らせ', 'labels' => array( 'name' => 'お知らせ', 'singular_name' => 'お知らせ', 'all_items' => 'お知らせ一覧', ), 'public' => true, 'has_archive' => true, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'revisions', ), ) ); } add_action('init', 'my_add_post_type'); /*** * * タクソノミー定義 * ***/ function my_add_taxonomy() { register_taxonomy( 'news-cat', 'news', array( 'label' => 'お知らせの種類', 'singular_label' => 'お知らせの種類', 'labels' => array( 'all_items' => '全ての種類', 'add_new_item' => 'お知らせの種類を追加' ), 'public' => true, 'show_ui' => true, 'show_in_nav_menus' => true, 'hierarchical' => true, 'rewrite' => array('slug' => 'news'), ) ); } add_action('init', 'my_add_taxonomy'); /*** * * 投稿詳細とタクソノミー一覧のURLリライト * ***/ function my_post_type_rewrite() { global $wp_rewrite; // お知らせ $wp_rewrite->add_rewrite_tag('%news%', '(news)','post_type='); $wp_rewrite->add_permastruct('news', '/%news%/%post_id%/', false); } add_action('init', 'my_post_type_rewrite'); function my_post_type_permalink($post_link, $id = 0, $leavename) { global $wp_rewrite; $post_delivery = get_post($id); $post = $post_delivery; if(is_wp_error( $post )){ return $post; } // お知らせ if('news' === $post->post_type){ $newlink = $wp_rewrite->get_extra_permastruct($post->post_type); $newlink = str_replace('%news%', $post->post_type, $newlink); $newlink = str_replace('%post_id%', $post->ID, $newlink); $newlink = home_url(user_trailingslashit($newlink)); return $newlink; } return $post_link; } add_filter('post_type_link', 'my_post_type_permalink', 1, 3);

試したこと

ここに問題に対して試したことを記載してください。

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

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

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/02/03 09:58

archive-news.phpを削除した状態でも同じ現象が発生しますか?
kei344

2020/02/04 03:17

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況を質問文に追記ください。
guest

回答1

0

ベストアンサー

archive-news.phpにWP_Query生成のコードを書くのは余計な気もしますが(※1)、ひとまず現象そのものは、'format' => 'page/%#%/','format' => '/page/%#%/',とすることで解消されないでしょうか?

※1
WP_Queryを書いている理由が一ページあたりの表示件数を設定するためであれば、pre_get_postsフックを使う方がよりベターだと思います。

https://www.kopjapan.com/blog/web/wordpress%E3%81%A7%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E6%8A%95%E7%A8%BF%E3%81%AE%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96%E3%81%A7%E3%81%AE%E8%A1%A8%E7%A4%BA%E4%BB%B6%E6%95%B0%E3%82%92%E6%8C%87


追記(質問者さんのコメントを受けて)

archive-news.php実装例。

PHP

1<?php get_header(); 2 3if ( have_posts() ) { 4 while ( have_posts() ) { 5 the_post(); 6 7 the_title(); 8 the_content(); 9 10 } // end while 11} // end if 12 13if ($wp_query->max_num_pages > 1) { 14 echo '<div class="pagination">'; 15 echo paginate_links( array( 16 'base' => get_pagenum_link(1).'%_%', 17 'format' => '/page/%#%/', 18 'current' => max(1, $paged), 19 'total' => $wp_query->max_num_pages, 20 'type' => 'list', 21 'mid_size' => '1', 22 'prev_text' => '<', 23 'next_text' => '>' 24 ) ); 25 echo '</div>'; 26} 27 28get_footer();

投稿2020/02/03 10:15

編集2020/02/04 04:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/02/04 02:03

ご回答ありがとうございます。 archive-news.phpを削除してもdomain/news/page/2の内容はindex.phpのものでした。 'format' => '/page/%#%/',に変えても変わらなかったのですが、pre_get_postsで値を設定したら無事表示されました。
退会済みユーザー

退会済みユーザー

2020/02/04 02:08

サブループでずっとエラーが出てたので、メインループでやろうと思ったのですが、ページャーをどう作ればいいのか分からなかったので、しょうがなくサブループでずっと試していた感じです...
退会済みユーザー

退会済みユーザー

2020/02/04 04:06

試したことの結果と現象が解決した過程がちょっと私には理解できませんが、ひとまずひとつ問題は解消したようで、よかったですね。 一応、自分だったら、archive-news.phpをどう実装するかのコード例を回答に追記しましたので、ご参考まで。
退会済みユーザー

退会済みユーザー

2020/02/04 04:25

ご丁寧に例までご教授いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問