title-tag テーマ機能を使う場合のタイトルの編集方法

WordPressのロゴ。

WordPress 4.1 から追加された title-tag テーマ機能を使う場合にも、 従来の方法と同じように、wp_title フィルタを使って出力されるタイトルを編集することができます。 title-tag 機能によるタイトルの出力は、従来の wp_title 関数を利用するためです。

また、title-tag テーマ機能を使った新しいタイトルの編集方法も実現されました。 ここでは title(タイトル) を編集する2つの方法について紹介します。

title-tag テーマ機能と _wp_render_title 関数

title-tag テーマ機能は、wp_head アクションにフックする _wp_render_title_tag 関数によって実現されています。

_wp_render_title_tag 関数が wp_head アクションにフックしていることは ./wp-includes/default-filters.php ファイルで確認することができます。 また _wp_render_title_tag 関数は、./wp-includes/general-template.php ファイルで確認することができます。

次のコードは実際の _wp_render_title_tag のコードです(ver 4.2.2)。 子の通り wp_title 関数が実行されるので、以前の WordPress と同じように wp_title フィルタを活用することができます。

function _wp_render_title_tag() {
	if ( ! current_theme_supports( 'title-tag' ) ) {
		return;
	}

	// This can only work internally on wp_head.
	if ( ! did_action( 'wp_head' ) && ! doing_action( 'wp_head' ) ) {
		return;
	}

	echo '<title>' . wp_title( '|', false, 'right' ) . "</title>\n";
}

_wp_render_title_tag 関数の実装

wp_title フィルターを使う方法

1つ目の方法はバージョン 4.1 以前の WordPress と同じ方法です。 wp_title フィルタにフックして、出力するタイトルを編集します。

function custom_wp_title($title, $sep)
{
    if (is_feed())
    {
        return $title;
    }
    global $paged, $page;
    
    if ($paged >= 2 || $page >= 2)
    {
        return $title . $sep . 'ページ' . max($paged, $page);
    }

    return $title;
}
add_filter('wp_title', 'custom_wp_title', 10, 2);

wp_title フィルタを使ったタイトルの編集

_wp_render_title_tag を置き換える方法

先の通り、title-tag テーマ機能は _wp_render_title_tag 関数を wp_head アクションにフックすることで実現されています。 したがって、そのフックを削除して、代わりの関数をフックすれば、タイトルのレンダリングに関わるすべての機能を置き換えることができます。

次のコードは実際に _wp_render_title_tag 関数を置き換えた例です。 置き換えた関数自体は実用的な関数ではありませんが、title 要素を出力する機能を、完全に置き換えることが出来ています。

function custom_render_title_tag()
{
    echo '<title>' . wp_title( '-', false, 'right' ) . '</title>\n';
}

remove_action('wp_head', '_wp_render_title_tag', 1);
add_action('wp_head', 'custom_render_title_tag')

_wp_render_title_tag を置き換える例