WordPress 4.4 から wp_title関数が 非推奨になりました

main_nowptitle

WordPress 4.1 から タイトル( <title>~</title> )を表示する方法が変わりましたが、WordPress 4.4 からは さらに従来のタイトルの内容を生成する wp_title関数 を使う方法が非推奨になり、新しい関数「wp_get_document_title()」が登場しました。

これを利用する方法は簡単です。 テーマの functions.php に「add_theme_support( ‘title-tag’ );」を記述するだけです。
内部では 新しい関数「wp_get_document_title()」が タイトルの内容を いい感じに生成し、wp_headフックを経由して、<title>~</title> が追加されます。
※テーマの header.php のファイルに <title>~</title> を追加しないようしてください。(2重表示になります)

サンプル

function nendebcom_theme_slug_setup() {
   add_theme_support( 'title-tag' );
}
add_action( 'after_setup_theme', 'nendebcom_theme_slug_setup' );

※functions.php に add_action( ‘after_setup_theme’~ がすでにあれば その中に「add_theme_support( ‘title-tag’ );」を入れましょう。

 

追加されたアクションフィルター

しかし、今までは 「wp_title()」で生成される内容を変更するのに wp_title関数のアクションフィルター「add_filter( ‘wp_title’, ~」を使ってましたが、新しい関数「wp_get_document_title()」を利用している場合は 「add_filter( ‘wp_title’, ~」が効かなくなります。

もし、タイトルの内容を変更したい場合は、以下の追加されたアクションフィルターを使うようにしてください。

pre_get_document_title short-circuits wp_get_document_title() if it returns anything other than an empty value.
document_title_separator filters the separator between title parts.
document_title_parts filters the parts that make up the document title, passed in an associative array

 

pre_get_document_title

タイトル文字自体を全部、置き換えます。

/*
 * タイトル文字を変更する。
 *
 * @return string title.
 *
 * @since WordPress 4.4.0
 * License: GPLv2 or later
 */
function nendebcom_theme_name_wp_title( $title ) {
    /* 
        ここで、いろいろ $title内を変更
    */
    return $title;
}
add_filter( 'pre_get_document_title', 'nendebcom_theme_name_wp_title' );

※公式な情報ではありません。

 

document_title_separator

タイトル文字内のセパレーターを変更します。(デフォルトは「-」です)

/*
 * タイトルの区切り線を | にする
 *
 * @since WordPress 4.4.0
 * License: GPLv2 or later
 */
function nendebcom_title_separator( $sep ){
	$sep = '|';
	return $sep;
}
add_filter( 'document_title_separator', 'nendebcom_title_separator' );

※公式な情報ではありません。

 

document_title_parts

タイトルをパーツごとに変更する事ができます。
返す $title は配列になります。

/*
 * タイトル文字をパーツごと変更する。
 *
 * @since WordPress 4.4.0
 * @return array title.
 *
 * License: GPLv2 or later
 */
function nendebcom_document_title_parts( $title ){
    /* 
        ここで、いろいろ (配列)$title内を変更
	$title['title'] = '';		//Title
	$title['page']  = '';		//Page number
	$title['tagline'] = '';		//Site description
	$title['site'] = '';		//Site title
    */
    return $title;
}
add_filter( 'document_title_parts', 'nendebcom_document_title_parts' );

通常は$title[‘title’] だけ変更するかと思われます。
$title[‘title’]を コア側ではどのようにしてデータを設定しているかは wp-includes/general-template.php の wp_get_document_title()関数の所を参考にしてください。
※公式な情報ではありません。

 



 

既存の add_filter( ‘wp_title’, ~ でも対応

「wp_get_document_title()」は とてもよくできています。サイトタイトルやページ番号なども付けてくれるので wp_title関数の時のように「add_filter( ‘wp_title’, ~」を使ってタイトルの内容を追加する必要がなくなりました。
「add_filter( ‘wp_title’, ~」が効かなくなります。と書きましたが、これで正解なのかもしれません。
もし、タイトルの内容が今まで使っていた「add_filter( ‘wp_title’, ~」の方を使いたい場合は、そのコードに「add_filter( ‘pre_get_document_title’,~」を 付け足す事で4.4も4.4未満でも どちらでも動作するようになります。

/*
 * タイトル文字を変更する。
 *
 * @return string title.
 *
 * @since WordPress ~4.3
 * License: GPLv2 or later
 */
function nendebcom_theme_name_wp_title( $title, $sep='', $seplocation='' ) {
    /* 
        ここで、いろいろ $title内を変更
    */
    return $title;
}
//WordPress ~4.3
add_filter( 'wp_title', 'nendebcom_theme_name_wp_title', 10, 3 );
//WordPress 4.4~
add_filter( 'pre_get_document_title', 'nendebcom_theme_name_wp_title', 10, 3 );

※wp_title と pre_get_document_title とで、引数の数が違いますので注意してください。( $sep=”, $seplocation=” としときましょう。)

 
 

追記 11/12

wp_title の「非推奨」は取り下げて 当分の間復活されたようです。しかし「add_filter( ‘wp_title’, ~」が効かなくなるのは変わりませんので対応は していきましょう。

Since WordPress 4.1, add_theme_support( ‘title-tag’ ); has been the recommended way of outputing a title tag for themes. Now, a year later the wp_title function has been officially deprecated. Take a look at this post if you want to see all the great new filters you can use to modify title tags.

UPDATE 12 November ? wp_title has been reinstated for the time being. It is a zombie function. add_theme_support( ‘title-tag’ ); remains the recommended way to insert a title tag into your theme, however there were use cases for wp_title that were not accounted for in the original deprecation decison

https://make.wordpress.org/core/2015/11/11/wordpress-4-4-field-guide/より

 
 

まとめ

現在、WordPress4.4 beta版なので 今後、もっといい方法が出てくるかもしれません。
既存のテーマやプラグインでの対応はこれからになると思います。将来「タイトル表示がおかしい?」てなった時 この記事を思い出してください。

 
 

参考

Make WordPress Core Document title in 4.4
https://make.wordpress.org/core/2015/10/20/document-title-in-4-4/

WordPress Codex Title Tag
http://wpdocs.sourceforge.jp/Title_Tag

WordPress Codex テンプレートタグ/wp title
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_title

Make WordPress Core Title Tags in 4.1
https://make.wordpress.org/core/2014/10/29/title-tags-in-4-1/