WordPress 4.1ではadd_theme_support(‘title-tag’)で文書titleをWordPressへ任せる
公開日: 執筆:佐藤
WordPress 4.1へ対応するテーマでは、add_theme_support( 'title-tag' )をafter_setup_themeで追加し、文書のtitleをWordPressへ任せます。テーマがheader.phpで独自のtitleを出しているなら、そのまま併用しないでください。同じ文書へtitleが二つ出る原因になります。
修正前に、テーマ内の<title>とwp_title(を検索します。どこが文書titleを出しているかを確認してから、theme supportの追加と既存処理の削除を一組で行います。
title-tag supportはafter_setup_themeで追加する
WordPress 4.1の発表では、add_theme_support( 'title-tag' )を使うと、文書titleの処理をWordPressへ任せられると説明しています。
テーマのfunctions.phpには、次のように追加します。
function example_theme_setup() {
add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'example_theme_setup' );
関数名のexample_theme_setupは説明用です。実際のテーマでは、既存関数と重ならない名前へ変えてください。
WordPress Coreのtitle tagに関する開発者向け説明は、supportをafter_setup_themeまたはinitで追加し、それより遅くしないよう案内しています。追加の引数は受け取りません。テーマの初期設定をまとめるafter_setup_themeで、メニュー、アイキャッチ画像などのsupportと一緒に管理すると、追加場所を追いやすくなります。
テーマが出しているtitleを残さない
title-tag supportを宣言することは、テーマ自身では文書titleを定義せず、WordPressが重複なく追加できると認めることです。次のような記述がheader.phpに残っていないか調べます。
<title><?php wp_title( '|', true, 'right' ); ?></title>
theme supportを追加したうえで、この記述も残すと、出力元が二つになります。追加するコードだけを納品せず、削除または旧版向け処理へ移すコードまで決めてください。
確認するときは、ブラウザーのタブに表示された文字だけを見ません。ページのHTML sourceを開き、<title>の開始tagが一つだけかを数えます。テーマ、プラグイン、独自関数のどれが文字列を変えているか分からない場合も、最終的なHTMLから先に確認すれば、重複の有無を切り分けられます。
文書titleと画面内の見出しは別に管理する
HTML5のtitle要素は、文書の題名または名前を表し、headの中へ一つだけ置きます。文書titleは、画面内の最初の見出しと同じ文字列である必要はありません。
title-tag supportが扱うのは、HTMLのheadへ出す文書titleです。記事本文のh1、archive pageに表示する見出し、投稿の題名そのものを自動で書き換える設定ではありません。
たとえば、category archiveで画面内の見出しを表示できていても、文書titleが一つだけ出ているかは別に確認します。反対に、文書titleが正しくても、本文の見出しが欠けていれば、theme supportを追加するだけでは直りません。
旧版も対象にするならfallbackを分ける
WordPress 4.1より前の版でも同じテーマを使う場合は、WordPress Coreの説明にあるfallbackを用意できます。
if ( ! function_exists( '_wp_render_title_tag' ) ) :
function example_theme_render_title() {
?>
<title><?php wp_title( '|', true, 'right' ); ?></title>
<?php
}
add_action( 'wp_head', 'example_theme_render_title' );
endif;
この処理は、WordPress側の_wp_render_title_tag()がない場合だけ、従来のwp_title()を使ったtitleをwp_headへ追加します。4.1でWordPressがtitleを出せる場合にはfallbackを動かさないため、二つの出力経路を同時に使いません。
旧版を対象にしないサイトへ、互換処理を無条件に増やす必要はありません。先に、運用対象とするWordPressの版を決めます。互換性を保つ費用と、古い版を更新する費用を比べ、どこまでtheme側で持つかを選んでください。
page typeごとに一つのtitleを確認する
themeを直したら、少なくとも次のpage typeを開きます。
| page type | 確認すること |
|---|---|
| トップページ | site名とページ内容を区別できるか |
| 投稿と固定ページ | 各ページの題名が反映されるか |
| categoryと日付archive | 一覧の種類を区別できるか |
| 検索結果 | 検索結果ページだと分かるか |
| 404 | 存在しないページのtitleだと分かるか |
各ページでHTML sourceを開き、titleが一つで、空ではないことを確認します。文字列の決め方を変える場合も、theme supportを追加する作業と、サイト名や投稿題名を決める作業を混同しません。
制作会社へtheme修正を頼む場合は、変更したfunctions.phpとheader.php、対象としたWordPressの版、確認したpage typeを受け取ります。実装を委託しても、サイト名と各ページの題名を管理する権限は、サイト運営側に残してください。
最初の一手は、theme directoryで<title>とwp_title(を検索することです。既存の出力元を一つずつ書き出してから、add_theme_support( 'title-tag' )を追加し、最終HTMLのtitleが一つになるところまで確認してください。
関連記事

