Twenty Twelveのwp_titleでサイト名の後にキャッチフレーズが付いてくる理由

WordPress個別サポート

WordPressの「外観」-「テーマ編集」メニューでテンプレートを開いてカスタマイズしてみようというとき、いろいろな着眼点がありますが、まずは、タイトルバーからキャッチフレーズ(サイトの説明文)を取り除く場面に着目します。簡単そうなので取り組もうとして、逆に頭の中がハテナで一杯になってしまった方もいるかもしれません。

WordPressのインストール直後のテーマであるTwenty Twelveのデフォルトの設定では、次のように、トップページのタイトルバーを見ると「サイト名 | キャッチフレーズ」のような構成になっています。

▼現在のタイトルバー(サイト名+キャッチフレーズ)
サイト名とキャッチフレーズのタイトルバー

これでも問題ありませんが、キャッチフレーズは長くなる場合もあるため、タイトルバーからは取り除こうという趣旨です。

▼このように変更したい
キャッチフレーズを削除したタイトルバー

加工結果も難しくないので、さっそく取り掛かろうと、「外観」-「テーマ編集」メニューからヘッダーのテンプレートファイルheader.phpを開いて、タイトルバーを作成しているHTMLのtitleタグを探すと、次の記述が見つかります。

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

※Twenty Elevenの場合は記述が少し異なります。

詳しい意味はわからなくてもなんとなく、<title>と</title>の間にある<?php wp_title( '|', true, 'right' ); ?>がタイトルバーの「したまち観光協会 ... 」に置き換わっているのではないかとピンとくるはずです。この部分から説明文を削除するため、参考としてマニュアルを調べる場合は、wp_titleについて調べるのが普通ですが、ここでつまづくかもしれません。

というのは、 wp_titleについて調べても「ページタイトルを表示する」という説明しかないからです。おそらく、キャッチフレーズを非表示にする方法は書かれていないでしょう。それは当然です。wp_titleは、キャッチフレーズとは関係ない命令だからです。

Twenty Twelveでwp_titleを呼び出したときにサイト名にキャッチフレーズが付加され理由は、wp_titleを呼び出したときに、twentytwelve_wp_titleという別の命令を実行するという仕組みになっているためです。

そのコードはfunctions.phpに記述されています。

試しに、「外観」-「テーマ編集」メニューでTwenty Twelveのfunctions.phpを開いてみると、次のような記述が見つかるはずです。

add_filter( 'wp_title', 'twentytwelve_wp_title', 10, 2 );

このadd_filterは「wp_titleが実行されたら、twentytwelve_wp_titleを実行してください」と指示する命令です。この指示のおかげで、wp_titleを実行するとtwentytwelve_wp_titleが実行されるようになります。

この仕組みによって、header.phpをちょっと見ただけでは理解しづらくなっているのです。

このように、何らかのタイミングで別の動作を発動させることを「フック」といいます。何らかのタイミングでのフックを「アクションフック」、何らかの出力に対するフックを「フィルターフック」(主に出力内容の加工)といいます。

Twenty Twelveのwp_titleのように、テーマに含まれるfunctions.phpなどにユーザー独自のフックを記述することもできます。

このような「フック」のコードは、WordPressの入門書でも「次のように入力してください」と指示されることがありますが、自力で構想を練ってゼロから作成できるようになるのは、ある程度PHPスクリプトの編集に慣れてからです。

したがって慣れていない方は、このコードの意味を深く考える必要はありません。ひとまず、「ある番号に電話をかけたら、別の電話番号に転送される」くらいの仕組みなのだとイメージしておけば良いでしょう。

さて、wp_titleを実行するとtwentytwelve_wp_titleが実行されると書きましたが、では、twentytwelve_wp_titleには何が書かれているのでしょうか。上記のフックの少し上に、次のようなコードがあるはずです。

function twentytwelve_wp_title( $title, $sep ) {
・サイト名を出力する
・キャッチフレーズを取り出す
・取り出したキャッチフレーズが空っぽではなく、
 現在表示しているのがトップページのときは、
 サイト名の後にキャッチフレーズを付加する
 (サイト名 | キャッチフレーズ)という形式
・2ページ目以降はページ番号を出力する
}

{ }の間に書かれたコードを日本語で書いてみましたが、この内容が実行されるということです。この中に「サイト名に説明文を付加する」という処理も含まれています。

このような仕組みによって、Twenty Twelveのheader.phpにあるwp_titleが実行されたときにサイト名にキャッチフレーズが付加されるということです。

キャッチフレーズを取り除くには、いくつか方法がありますが、単純に次の2行をコメント(行の先頭に「//」を付加する)にすれば、サイト名の後のキャッチフレーズは削除されます。

if ( $site_description && ( is_home() || is_front_page() ) )
	$title = "$title $sep $site_description";
//if ( $site_description && ( is_home() || is_front_page() ) )
	//$title = "$title $sep $site_description";

※PHPスクリプトをコメントにするというのは、その部分を実行させない、つまり、その部分の文字列を画面に表示させない(画面から削除される)ことになります。

キャッチフレーズを削除したタイトルバー

●不要なコードは削除しても構いませんが…

コメントにする代わりにバッサリと削除しても構いませんが、コメントにした方が無難です。というのは、うまくいくか(間違えずに作業できるか)どうかわからないからです。

PHPスクリプトの編集は1行でも間違えると、WordPressの動作が停止する場合があります。コードを削除してしまった場合、すぐに元のコードに戻せるでしょうか。コメントにしておけば、問題が発生したときは行頭の「//」を取り除けば元の状態に戻せます。

書籍などで不要な箇所を取り除くときに「この部分を削除してください」と書かれているのは、それが上手くいく前提だからです。コードをコメントにして、試行錯誤で作業を進める方法もおさえておきましょう。

header.phpで実行されている関数を見てもピンとこないときは、functions.phpのadd_filterやadd_actionを探してみましょう。元の関数の動作がカスタマイズされているかもしれません。

functionについて少しだけ補足しておきます。functionは次のような構造になっています。

function 関数名() {
 処理
}

「function」とは、まとまった命令を実行する「ユーザー定義関数」という仕組みです。つまり、「function」で定義されている「twentytwelve_wp_title」もユーザー定義関数です。「twentytwelve_wp_title」のような任意の関数名を付け、実行したい処理を{ }の間に書いておきます。呼び出されたタイミングで、その処理が実行されます。この動作を、「twentytwelve_wp_title関数を呼び出す」や「twentytwelve_wp_title関数を実行する」と表現します。

functionの中に具体的に何を書くのか考えすぎると頭が痛くなるので、ここでは、functionで作成した関数が呼び出されるのだということを覚えておけば十分です。

「twentytwelve_wp_title関数を呼び出す」と書きましたが、wp_titleも「呼び出される関数」です。つまり、WordPressのマニュアルに出てくるwp_titleという命令や「タグ」と表現される命令などはすべて、PHPから見れば「関数」なのです。

単純な「関数」(PHP関数やExcel関数)と「ユーザー定義関数」の違いは、ユーザーが自力で作成しなくても最初から使えるかどうかの違いです。functionを使ってわざわざ作るのがユーザー定義関数ということです。

※興味がある方は、WordPressインストール先の「wp-includes\general-template.php」を開いてみてください。次のような記述があり、wp_title自体もPHPスクリプトで記述された(ユーザー定義の)関数であることを確認することができます。

function wp_title($sep = '&raquo;', $display = true, $seplocation = '') {
...略...
}

WordPressのPHP