WordPressのカテゴリページやアーカイブページで、タイトルに『カテゴリー:』とかつくやつを消すTipsは検索するとすぐに出てきます。
検索したものをそのまま使っていたら、年のアーカイブページでうまく動かず、なんでかな?と小一時間悩んだのでまとめておきます。
問題点:年ごとのアーカイブページでなぜか月が表示される
アーカイブページタイトルにつくXXX:の文言を削除するために使用したスクリプトは以下のようなものです。
function change_archive_title( $title ) {
if (is_category()) {
$title = single_cat_title('',false);
} elseif (is_tag()) {
$title = single_tag_title('',false);
} elseif (is_tax()) {
$title = single_term_title('',false);
} elseif (is_post_type_archive() ){
$title = post_type_archive_title('',false);
} elseif (is_date()) {
$title = get_the_time('Y年n月');
} elseif (is_search()) {
$title = '検索結果:'.esc_html( get_search_query(false) );
} elseif (is_404()) {
$title = '「404」ページが見つかりません';
} else {
}
return $title;
};
add_filter( 'get_the_archive_title', 'change_archive_title');
問題が起きる理由
アーカイブページをis_date()で判定していますが、その時に年月と決め打ちしているので、パンくずリストなどから年アーカイブを表示すると、正しく動かなくなります。
要求されているページが、日付アーカイブページ(年別、月別、日別アーカイブページの何れか)か調べる。
is_dateの返り値がtrueの場合、is_year、is_month、is_dayの何れか1つがtrueになる。
https://elearn.jp/wpman/function/is_date.html
修正方法
is_date()とis_year()、is_month()を組み合わせて条件分けしてあげる必要があります。
function change_archive_title( $title ) {
if (is_category()) {
$title = single_cat_title('',false);
} elseif (is_tag()) {
$title = single_tag_title('',false);
} elseif (is_tax()) {
$title = single_term_title('',false);
} elseif (is_post_type_archive() ){
$title = post_type_archive_title('',false);
} elseif (is_date() && is_month()) {
$title = get_the_time('Y年n月');
} elseif (is_date() && is_year()) {
$title = get_the_time('Y年');
} elseif (is_search()) {
$title = '検索結果:'.esc_html( get_search_query(false) );
} elseif (is_404()) {
$title = '「404」ページが見つかりません';
} else {
}
return $title;
};
add_filter( 'get_the_archive_title', 'change_archive_title');
まとめ
検索しても、金太郎あめのように同じスクリプトしか出てこないので、年単位のアーカイブページで問題が起きることを誰も気が付いていないのかもしれないです。
分かっている人にとっては当たり前の内容かもしれませんが、コピペばかりしている人には問題が起きる可能性すら考えていないので、もしなんか変だな?と思ったら今回の記事を参考にしてみてください。