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をコピーしました!

エンジニアを目指す方必見!おすすめプログラミングスクール

最短でエンジニアになるには、いかに効率よく学習するかが重要です。モチベーションを維持しながら最短でエンジニアを目指すならプログラミングスクールを利用するのもおすすめです。

目次
閉じる