【WP4.4】<title>タグからdescriptionをトル

テーマのカスタマイズしてて気づいたんだけど、Wordpress4.4からwp_title関数が使えないのね…。
titleタグの書き出しが気にいらないので修正しようとして気づいた。

どゆことかちゅーと、functions.phpに

add_filter('wp_title','my_custom');

って書いても使えない、と。

いつからだっけ、何年か前からheadタグ内ってテンプレートには

<head>
	<?php wp_head(); ?>
</head>

とだけ書いておいて、wp_headの中身はfunctions.phpでフックして書き換えてね、って感じになってるのよ。
動的にごりごり書き換わる部分だから、テンプレートに書かないでほしいってことかね。
まあそれはいいんだけど。

titleタグが気に入らない

デフォルトだと、ホームを表示したときのtitleタグが、

<title>サイト名 - サイト説明</title>

になるの。それはいいとしてもだ。
次のページを表示したら

<title>サイト名 - ページ 2 - サイト説明</title>

になるの。
そ、そこにページ数カウントが割り込んでくるのかあ… それどうかなあ…
カテゴリーアーカイブのページとかでは

<title>カテゴリー名 - ページ 2 - サイト名</title>

になるから、それと統一してんのかね?

サイト説明いらない

俺的には、サイト説明をtitleタグにいれなくていい。SEO的にはアレかもしれんが。
ホームの時は

<title>サイト名</title>

でいいし、次のページいったとき

<title>サイト名 - ページ 2</title>

となればいいわけ。他のページでもサイト説明をtitleタグに入れる必要ない。

そこらへんどうなってるのか調べたら、ありました。
https://developer.wordpress.org/reference/functions/wp_get_document_title/

// Append the description or site title to give context.
    if ( is_front_page() ) {
        $title['tagline'] = get_bloginfo( 'description', 'display' );
    } else {
        $title['site'] = get_bloginfo( 'name', 'display' );
    }

これだわ。
なるほど、$titleの配列の[‘tagline’]にサイト説明が入ってる、と。
そんでページによって、配列に要素がないときは消して、うまいこと表示したり非表示にしたりしてるわけですね。

で、フィルターフックは”document_title_parts”でいけるようだ。
https://developer.wordpress.org/reference/hooks/document_title_parts/

用があるのは[‘tagline’]だけなんで、こんな感じにしました。functions.phpに記述。

function remove_title_description( $title ) {
	$title['tagline'] = '';
	return $title;
}
add_filter('document_title_parts','remove_title_description');

[‘tagline’]の中身をからっぽにしたった(;´Д`)
wp-includes/general-template.php の934行目で

array_filter( $title )

ってなってるからカラにすれば消えるよね。

以上です。

ちなみに

$titleが配列になってるんで並び替えも、”document_title_parts”のフックでできるね。
$titleは、[‘title’] , [‘page’] , [‘tagline’] , [‘site’] の順で格納されてるようです。たぶん…ですけど。
wp-includes/general-template.php を見ると、
is_front_page()のとき、[‘title’]にはサイト名、[‘tagline’]にサイト説明が入って、[‘site’]はnull、
ページングした時だけ[‘page’]にページ数が入ってそれ以外のときはnull、
それ以外のページでは、[‘title’]にページ名、[‘tagline’]はnull、[‘site’]にサイト名、が入るようになっていると思われる。たぶん。

例えば、

function remove_title_description( $title ) {
	ksort( $title );
	return $title;
}
add_filter('document_title_parts','remove_title_description');

とかやると、キーの昇順で並ぶから、
[‘page’] , [‘site’] , [‘tagline’] , [‘title’]
の順に並ぶよ(;´Д`) やってみたらできた。めちゃくちゃだ。わらい。

コメントを残す

メールアドレスが公開されることはありません。