この記事は最後に更新してから1年以上経過しています。

新テーマ「Twenty Twenty-Three」にはfunctions.phpがない

説明

WordPress 6.1に同梱された新テーマ「Twenty Twenty-Three」を見てみると、そこには見慣れたfunctions.phpがない。Full Site Editing(FSE)対応テーマってこんな感じなのかと思いつつ、テーマの設定がどうなっているのか調べてみた。

ブロックベースのテーマ

テーマを「Twenty Twenty-Three」に切り替え、出力された内容を見てみると、サイト共通のfeedリンクが出力されている。このことからテーマに'automatic-feed-links'が適用されていることがわかったので、WordPressのソースコードを検索すると、wp-includes/theme.php の中に「_add_default_theme_supports」というプライベート関数が見つかった。

function _add_default_theme_supports() {
	if ( ! wp_is_block_theme() ) {
		return;
	}

	add_theme_support( 'post-thumbnails' );
	add_theme_support( 'responsive-embeds' );
	add_theme_support( 'editor-styles' );
	/*
	 * Makes block themes support HTML5 by default for the comment block and search form
	 * (which use default template functions) and `` and `` shortcodes.
	 * Other blocks contain their own HTML5 markup.
	 */
	add_theme_support( 'html5', array( 'comment-form', 'comment-list', 'search-form', 'gallery', 'caption', 'style', 'script' ) );
	add_theme_support( 'automatic-feed-links' );

	add_filter( 'should_load_separate_core_block_assets', '__return_true' );
}

この関数はバージョン5.9.0で追加されたもので、setup_themeアクションのコールバック関数として定義されており、従来からテーマの設定を行う際に利用しているafter_setup_themeアクションより先に実行するものだった。

_add_default_theme_supports関数の中身を見てみると、 wp_is_block_theme関数によりテーマがブロックベースのテーマなのか判定し、ブロックベースのテーマでない場合はなにもしない。ブロックベースのテーマの場合は、 add_theme_support関数によりいくつかの機能を追加している。これらの機能に過不足があった場合は、テーマのfunctions.phpに記述することになるようだ。


最終更新 : 2022年10月06日 12:56


お勧め

wp_add_post_tags(2012年7月5日 更新)

mixed wp_add_post_tags( [ int $post_id = 0 [ , string $tags = '' ] ] )
投稿情報に投稿タグを追加する。

get_tags(2018年5月27日 更新)

array get_tags( [ mixed $args = '' ] )
条件を指定してタグ情報を検索し、マッチしたすべてのタグ情報を取得する。

wp_array_slice_assoc(2022年2月2日 更新)

array wp_array_slice_assoc( array $array, array $keys )
キーを指定して配列の一部を抽出する。

get_post_permalink(2022年11月6日 更新)

string | false get_post_permalink( [ int | WP_Post $id$post = 0 [ , bool $leavename = false [ , bool $sample = false ] ] ] )
カスタム投稿タイプの投稿ページのパーマリンクを取得する。

remove_query_arg(2024年3月21日 更新)

string remove_query_arg( string | string[] $key [ , bool | string $query = false ] )
クエリーURIからパラメータ(キー名=値)を削除する。