TL;DR
WordPress4.4 以降において title タグを自動出力するには、非推奨の wp_title()関数の代わりに、テーマの機能を設定する関数add_theme_support( 'title-tag' );
を functions.php に記述します。functions.php の中に書くことで保守性もよくなります。
WordPress4.4 以降の title の記述方法
functions.php
function mytheme_set() {
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'mytheme_set' );
after_setup_theme
は全てのテーマが読み込まれた後にテーマの機能を設定するフックです。タイトルが重複するので header.php には title タグを記入しないようにします。 これで head 内にタイトルが自動で出力されますが、body 内にタイトルを表示したい場合は、wp_get_document_title()をテンプレートファイルの任意の場所に記述します。
<?php echo wp_get_document_title(); ?>
document_title_parts
document_title_parts
はタイトルの一部をフィルタリングするフックです。 タイトルをページごとに変更したい場合はdocument_title_parts
を functions.php に記述します。
add_filter('document_title_parts', '関数名');
条件分岐させる基本的な形
function 関数名($title){
if(条件){
$title['title'] = 変更後のタイトル値 ;
}
return $title;
};
add_filter('document_title_parts', '関数名');
document_title_parts の$title パラメータ
- title は閲覧したページタイトル
- tagline はホームページのサイト説明
- page は番号付きページ番号
- site はホームページにない場合はサイトのタイトル
文字「○ ページ目」を削除
情報を削除するには unset を使います。例えば、ブログ一覧ページなどで、ページ番号の情報(例:ページ 2)をタイトルから削除する場合はこのように書きます。
function remove_title_pagenation($title){
unset( $title['page'] );
return $title;
};
add_filter('document_title_parts', 'remove_title_pagenation');
サイトの説明を削除
ホームページのキャッチフレーズ(サイトの説明)を削除する場合は、このような記述になります。
function remove_title_description ( $title ) {
if ( is_home() || is_front_page() ) {
unset( $title['tagline'] );
}
return $title;
}
add_filter( 'document_title_parts', 'remove_title_description', 10, 1 );
検索結果ページの和欧混植を置換・変更する
検索結果のページタイトルはデフォルトでダブルクォーテーションが付与されているので和欧混植になっています。これを以下のように日本語の記述名に置換してみましょう。
変更前:“○○” の検索結果
↓
変更後:「○○」を検索しました
// ページタイトル「検索結果」の一部を変更する
function change_title($title){
if(is_search()){
$search = array('“','”','の検索結果');
$title = str_replace( $search, '', $title );
$title['title'] = '「' . $title['title'] . '」を検索しました';
}
return $title;
};
add_filter('document_title_parts', 'change_title');
条件分岐タグので検索結果を指定して、消したい文字を配列に入れて、str_replace で置換しています。条件分岐タグを変えていけば、アーカイブ・404・カスタムポストなどのページも好きなように変更できます。 検索結果だけ変更したい場合は、サイト内検索を行ったときのクエリ文字列を取得するget_search_query()
を使うと記述量を減らすことができます。
function change_title($title){
if(is_search()){
$title['title'] = '検索結果:' . get_search_query();
}
return $title;
};
add_filter('document_title_parts', 'change_title');
404 ページのタイトルを変更する
条件分岐で 404 ページなどを追加して個別に変更します。
// ページごとにタイトルを変更する
function change_title($title){
if(is_search()){
$title['title'] = '検索結果:' . get_search_query();
} elseif(is_404()){
$title['title'] = 'お探しのページは見つかりません' ;
}
return $title;
};
add_filter('document_title_parts', 'change_title');
以上、SEO 対策にもなる、最近の WordPress タイトルカスタマイズでした。