WordPressのthe_archive_title()やget_the_archive_title()関数は、カテゴリーやアーカイブのタイトルを簡単に出力できる便利な関数です。
ただし、この関数をそのまま使うとカテゴリー名の前に
「カテゴリー:未分類」
などのように「カテゴリー:」という文字がついてしまいます。
今回はこの文字の削除方法を解説していきます。
一般的に紹介されているfunctions.phpに記載する方法の他、archive.phpやcategory.phpに記載する方法も解説します。
{get_}the_archive_title()のカスタマイズ
the_archive_title()や、get_the_archive_title()で出力される「カテゴリー:」や「アーカイブ:」「月:」などの余分な文字を削除するには、WordPressのフィルターフックを使います。
apply_filters( 'get_the_archive_description', string $description )
functions.phpに記載して汎用的に変更する方法
カスタマイズを汎用的に管理するには、functions.phpに以下を記載します。
// the_archive_title(), get_the_archive_title() から余計な文字を削除
add_filter( 'get_the_archive_title', function ($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」ページが見つかりません';
}
return $title;
});
上記の条件分岐から必要なものだけを記載すれば良いです。
functions.phpに記載する方法は、フィルタを一元管理できる反面、条件分岐などで処理が煩雑になります。
各テンプレートに記載する方法
archive.phpやcategory.php、tag.phpなど、対応する各テンプレートがある場合は該当のテンプレートに書くこともできます。
category.phpに記載
// the_archive_title() - 最初の「カテゴリ:」を削除
add_filter( 'get_the_archive_title', function( $title ) {
return single_cat_title('', false);
});
上記の例では、category.phpに記載しているため最初からis_category()の条件を満たしており、カテゴリーページにしか影響が及びません。
また、コードもfunctions.phpに記載するよりもはるかにすっきりと書くことができます。
テーマに各アーカイブのテンプレートが存在しており、アーカイブ毎に表示を変えたい場合にはこちらの方法を採用するといいでしょう。
「カテゴリ:」部分を他の文字列にしたい
「カテゴリ:」部分を削除するのではなく他の文字列にしたい場合は、以下のようにします。
以下はcategory.phpに記載した場合を想定しています。functions.phpでは適宜カスタマイズをして下さい。
// the_archive_title() - 別の文字列にする
add_filter( 'get_the_archive_title', function( $title ) {
return single_cat_title('', false) . 'への記事一覧';
});
{get_}the_archive_title()の使用方法
各テンプレートにthe_archive_title()を記載することによって、カテゴリーなどのタイトルが表示できます。
以下の例では、<h1>で囲んでいます。
<?php the_archive_title( '<h1 class="page-title">', '</h1>' ); ?>
コメント