パンくずリストの表示を変えたい

パンくずリストを表示するプラグインを使ってパンくずを表示しているときに、ふと404ページの表示を見て「あら?」っと思いました。

404ページのパンくずリスト(変更前)

サイトのタイトルが404ページのタイトルの後ろにハイフンつなぎで表示されている!
まぁ、当たり前といえば当たり前なのですが、このパンくずリストのプラグインは、例えば投稿ページだったらページのタイトルでなく投稿のタイトルが設定されます。404ページは、 wp_get_document_title関数で取得した値を表示しているので、ページのタイトルをそのまま設定しています。このサイトのタイトルを除外したい。

document_title_partsフィルターフック

wp_get_document_title関数の中身を見てみました。wp-includesフォルダ内にあるgeneral-template.phpで定義されており、タイトルに対してフィルターフック(document_title_parts)を設定している箇所があったので、これを利用します。とりあえず取得できる中身を確認。

/**
 * Change 404 title.
 *
 * @param  array $title
 * @return array $title
 */
function change_404_title( $title ) {
	var_dump($title);
	return $title;
}
add_filter( 'document_title_parts', 'change_404_title' );

ダンプした結果はこちら。

array(2) {
  ["title"]=>
  string(42) "ページが見つかりませんでした"
  ["site"]=>
  string(17) "てらこや.work"
}

この連想配列をセパレータ「-」(デフォルト)で結合してタイトルを出力しています。なので、この時点で連想配列の["site"]を空にしてあげればうまくいきそう。

/**
 * Change 404 title.
 *
 * @param  array $title
 * @return array $title
 */
function change_404_title( $title ) {
	if ( is_404() ) {
		$title['site'] = '';
	}
	return $title;
}
add_filter( 'document_title_parts', 'change_404_title' );

表示してみると……

404ページのパンくずリスト(変更後)

できた!\(^o^)/
タイトルをオリジナルに変更するのであれば、 $title[‘title’] = ‘404 Not Found’;といった感じで、連想配列のtitleの方を書き換えてあげればOKでした。