wordpressで生成されるtitleタグの内容を変更する

wordpressで生成されるtitleタグの内容を変更する

OGPタグの設定やJSON-LD形式での構造化データのマークアップなどのカスタマイズをしていて、ふと気になってことがありました。

<head>タグ内の<title>の内容が以下のようになっていました。

ページの種類タイトルの表示
トップページサイト名-キャッチフレーズ
投稿・固定ページページタイトル-サイト名
アーカイブページアーカイブタイトル-サイト名

カテゴリーやタグ一覧ページのタイトル後にサイト名が付くのはまだ良いとして、トップページと投稿ページはちょっと変えたいなと思い変更することにしました。

目次

原因はwp_get_document_title

調べてみるとwp_head()が実行される際、<title>タグ生成時にwp_get_document_title()が使用されていることで、上記の表のような振る舞いをしてしまうようです。

そもそも構造化データ内にキャッチフレーズやサイト名が入っているので、わざわざタイトルにそれらを表示する必要がないため、これらを消していきます。

pre_get_document_titleを使う

pre_get_document_titlewp_get_document_title()で用意されているフィルターです。このフィルターを使ってタイトルの内容を変更します。

function title_modifi($title){
  if(is_front_page() || is_home()){
    $title = get_bloginfo('name');
  }elseif(is_single()){
    $title = single_post_title('',false);
  }
  return $title;
}
add_filter('pre_get_document_title','title_modifi');

これをfunctions.phpファイルに追記することで、トップページは「サイト名のみ」、投稿ページは「ページタイトルのみ」に変更ができました。

もし、固定ページやアーカイブページも同様に変更したい場合は以下の方法で変更できます。

function title_modifi($title){
  if(is_front_page() || is_home()){
    $title = get_bloginfo('name');
  }elseif(is_singular()){
    $title = single_post_title('',false);
  }elseif(is_category() || is_tag()){
    $title = single_term_title('',false);
  }elseif(is_post_type_archive()){
    $title = post_type_archive_title('',false);
  }
  return $title;
}
add_filter('pre_get_document_title','title_modifi');

is_single()からis_singular()に変更したことで、投稿ページと固定ページに対応するようにしています。

そのあとの条件分岐は「カテゴリー」「タグ」「カスタム投稿」の一覧ページで各タイトルを変更しています。

他にも、404ページなども変更できるのですが、ひとまずこの辺りを変更しておけば問題ないのではないでしょうか。