wordpressのtitle タグの通常の記述方法は以下の通りです。
...
<title><?php wp_title('|', true, 'left'); ?></title>
...
WordPress4.4以降ではフィルターを使って動的にタイトルを変更することができます。
この記事ではフィルターを使ってタイトルを動的に変更する方法を3つご紹介します。
ご紹介するフィルターは次のとおりです。
wp_head()内でタイトルを出力する
まずはwp_head()
内でタイトルを出力する必要があります。
次のコードをfunctions.phpに追加してください。
<?php
add_theme_support( 'title-tag' );
従来はwp_title()
を使ってタイトルを表示していましたが、現在はadd_theme_support()
を使ってtitle
タグを出力することが推奨されています。
また、title
タグをwp_head()
内で出力するのでheader.phpには次のコードを入れておく必要があります。
...
<?php wp_head() ?>
...
これでタイトルを動的に変更する準備が整いましたので、次からはタイトルの変更方法をご紹介します。
タイトルのすべてを変更する
タイトルをすべて変更するにはpre_get_document_title
フィルターを使用します。change_document_title
関数内で条件分岐を設けることで、様々な場合に対応したタイトルを生成することができます。
<?php
add_filter( 'pre_get_document_title', 'change_document_title' );
function change_document_title( $title )
{
if( is_archive() )
{
// アーカイブページ
$title = $title .'のアーカイブ';
}
return $title;
}
title
タグの出力は次の通りです。
<title>サンプルのアーカイブ</title>
pre_get_document_title
フィルターはwp_get_document_title()
内で使用されています。pre_get_document_title
フィルターで空文字以外を返すとその後の処理は行われません。
https://core.trac.wordpress.org/browser/tags/5.7/src/wp-includes/general-template.php#L1119
具体的には後述する以下の内容の処理が行われずにtitle
タグを生成します。
- セパレーターを変更する
- タイトルの一部を変更する
セパレーターを変更する
タイトル内のセパレーターの初期値は「-」なので、デフォルトでは次のようにtitle
タグが出力されます。
<title>サンプル - サンプルサイト</title>
タイトル内のセパレーターを変更するにはdocument_title_separator
フィルターを使用します。
<?php
add_filter( 'document_title_separator', 'change_document_title_separator' );
function change_document_title_separator( $separator )
{
return ' |';
}
title
タグの出力は次の通りです。
<title>サンプル |サンプルサイト</title>
document_title_separator
フィルターwp_get_document_title()
内でpre_get_document_title
フィルターの後で使用されています。
https://core.trac.wordpress.org/browser/tags/5.7/src/wp-includes/general-template.php#L1119
pre_get_document_title
フィルターを使用している場合はdocument_title_separator
フィルターは機能しません。
タイトルの一部を変更する
タイトルの一部を変更するにはdocument_title_parts
フィルターを使います。
タイトルを変更するときに使えるパラメータは次の通りです。
https://developer.wordpress.org/reference/hooks/document_title_parts/#parameters
<?php
add_filter( 'document_title_parts', 'change_title_parts', 10, 1 );
function change_title_parts ( $title )
{
if( is_archive() )
{
// アーカイブページ
$title['title'] = $title['title'].'のアーカイブ';
}
elseif( is_404() )
{
// 404ページ
$title['title'] = 'お探しのページは見つかりませんでした';
}
// 以下のパラメータを使用できます。
// $title['page'] = ''; // ページ送りがあるページのページ番号(オプション)
// $title['tagline'] = 'キャッチフレーズ'; // トップページの時のキャッチフレーズ(オプション)
// $title['site'] = 'サイト名'; // トップページ以外の時のサイトタイトル(オプション)
return $title;
}
titleタグの出力は次の通りです。
<title>サンプルのアーカイブ - サンプルサイト</title>
pre_get_document_title
フィルターを使用している場合はdocument_title_parts
フィルターは機能しません。
まとめ
WordPress4.4以降ではタイトルを動的に変更するフィルターは3つあります。
条件に応じて動的にタイトルを変更できます。
必要に応じて各フィルターを使い分けてください。
コメント