テーマのカスタマイズしてて気づいたんだけど、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’]
の順に並ぶよ(;´Д`) やってみたらできた。めちゃくちゃだ。わらい。