この記事は最後に更新してから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


お勧め

get_block_editor_settings(2021年8月17日 更新)

array get_block_editor_settings( array $custom_settings, WP_Block_Editor_Context $block_editor_context )
ブロックエディター設定内容を取得する。

wp_insert_attachment(2018年5月27日 更新)

mixed wp_insert_attachment( mixed $args [ , string $file = false[ , int $parent = 0 [ , bool $wp_error = false ] ] ] )
メディア(添付ファイル)を登録する。

remove_all_shortcodes(2018年5月27日 更新)

void remove_all_shortcodes( )
すべてのショートコードを削除する。

is_wp_error(2020年8月31日 更新)

bool is_wp_error( mixed $thing )
WP_Errorオブジェクトか調べる。

delete_user_setting(2022年1月31日 更新)

bool | null delete_user_setting( string | array $names )
ユーザーインターフェイス設定を削除する。