前提・実現したいこと
「固定ページ(page-week.php)」に、
「カスタム投稿タイプ(monday)」の一覧を表示するコードを完成させたいです。
こちらのサイトを参考に下記のソースコードを書き、しかし問題が発生中です。
発生している問題・エラーメッセージ
「カスタム投稿タイプ(monday)」の一覧を表示するために、
functions.phpに
$query->set( 'post_type', array( 'monday' ) );
を書くと404になります。
またはこれを消せば404には行かなくなりますが、でもその場合、「固定ページ(page-week.php)」の<h3><?php echo get_the_title(); ?></h3>
が表示するのは、「固定ページ(page-week.php)」のタイトルであって、「カスタム投稿タイプ(monday)」のタイトルではありません。
一体なぜ上のような問題が発生し、どうしたらうまくいくのでしょうか?
ご意見、ご回答、よろしくお願いいたします。
該当のソースコード
↓記事一覧を出力するループ(page-week.php)
php
1<?php 2/** 3 * Template Name: page-week 4**/ 5?> 6 7<h2>「カスタム投稿タイプ(monday)」の記事一覧を出力したい<h2> 8 9<?php if (have_posts()): ?> 10<?php while (have_posts()) : the_post(); ?> 11 <h3><?php echo get_the_title(); ?></h3> 12<?php endwhile; ?> 13<?php else: ?> 14 <p>なし</p> 15<?php endif; ?>
↓ループの変更(functions.php)
php
1function change_posts_per_page($query) { 2 if ( is_admin() || ! $query->is_main_query() ) { 3 return; 4 } 5 if ( $query->is_page( 'week' ) ) { // weekはslugです 6 $query->set( 'posts_per_page', 20 ); 7 $query->set( 'post_type', array( 'monday' ) ); // これがあると404 8 $query->set( 'author', get_current_user_id() ); 9 return; 10 } 11} 12add_action( 'pre_get_posts', 'change_posts_per_page' );
試したこと
pre_get_postsではなく、サブループで
$args = array( 'post_type' => 'monday' );
のようにすると、ちゃんと「カスタム投稿タイプ(monday)」の記事一覧が表示できました。
あなたの回答
tips
プレビュー