wordpressのタイトルを書き換える3つの方法

wordpressのtitle タグの通常の記述方法は以下の通りです。

...
<title><?php wp_title('|', true, 'left'); ?></title>
...

WordPress4.4以降ではフィルターを使って動的にタイトルを変更することができます。

この記事ではフィルターを使ってタイトルを動的に変更する方法を3つご紹介します。
ご紹介するフィルターは次のとおりです。

  • タイトルをすべて変更するならpre_get_document_titleフィルター
  • タイトルのセパレーターを変更するならdocument_title_separatorフィルター
  • タイトルの一部を変更するならpre_get_document_titleフィルター

ご紹介するタイトル変更方法はWordpress4.4以降で機能します。
wordpressではテンプレートからタイトルを変更することはできません。

目次

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つあります。

  • タイトルをすべて変更するならpre_get_document_titleフィルター
  • タイトルのセパレーターを変更するならdocument_title_separatorフィルター
  • タイトルの一部を変更するならpre_get_document_titleフィルター

条件に応じて動的にタイトルを変更できます。
必要に応じて各フィルターを使い分けてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

目次