日付アーカイブページで(その日付の)投稿が存在しない場合、WordPressは404ページにアクセスします。
WordPressに404ではなくオリジナルのアーカイブを使い続けるようにする方法はありますか。そのようにすれば、 "No posts found"メッセージを出力するためにif ( have_posts() )
条件を使うことができます。
コードをOPの回答から404テンプレートフィルタに移動し、WPにdate.php
の代わりに404.php
ファイルを強制的にロードさせることができます。それでも404ヘッダーを送信しますが、別のテンプレートを使用してページをレンダリングします。
function wpd_date_404_template( $template = '' ){
global $wp_query;
if( isset($wp_query->query['year'])
|| isset($wp_query->query['monthnum'])
|| isset($wp_query->query['day']) ){
$template = locate_template( 'date.php', false );
}
return $template;
}
add_filter( '404_template', 'wpd_date_404_template' );
さて、熟考してみれば、私があまりにも多くのWPを求めているのかどうかはわかりません。私はSEOの観点から私は404に空のページをしたいのですが、私は確かにそれらをインデックスにしたくないと思います。
代わりに404テンプレートを使用して "No posts found"メッセージを出力することにしましたが、is_date()
、is_day()
(など)関数は404ページでは機能しないため、404が日付アーカイブ。
以下をURLを検出するために404.php
に貼り付けてください。
global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
それから、変数$is_date_archive
を使用して404テンプレートをそれに応じて変更できます。
404.php
)global $wp_query;
$is_date_archive = ( isset($wp_query->query['year']) || isset($wp_query->query['monthnum']) || isset($wp_query->query['day']) );
if( $is_date_archive ){ echo 'No posts found'; } else { echo 'general 404 page'; }