• WordPress 4.1ではadd_theme_support(‘title-tag’)で文書titleをWordPressへ任せる

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が一つになるところまで確認してください。

戻る