WordPress5.8でFSE系のブロックをオフ(使用不可)にする方法

WordPress5.8から、FSE(フルサイト編集)用のブロックが追加されました。

しかし、ブロックベーステーマならばともかく、従来のPHPで組むテーマでこれらのブロックを使うことはほぼないと思います。むしろ邪魔になってしまうケースがほとんどだと思います。

なので、今回はそのFSEのためのブロックを使用できないようにする方法を紹介しておきます。

目次

PHP側で特定のブロックをオフにする方法

オフにするには、'allowed_block_types_all'というフックを使います。(旧'allowed_block_types'

add_filter( 'allowed_block_types_all', function ( $allowed_block_types, $block_editor_context ) {

	$allowed_blocks = [];
	if ( is_array( $allowed_block_types ) && ! empty( $allowed_block_types ) ) {
		// すでに許可リストがある場合
		$allowed_blocks = $allowed_block_types;
	} else {
		// まだ空だったら全ブロック取得
		$block_types = \WP_Block_Type_Registry::get_instance()->get_all_registered();
		foreach ( $block_types as $block_type ) {
			$allowed_blocks[] = $block_type->name;
		}
	}

	$FSE_blocks = [
		'core/loginout',
		'core/page-list',
		'core/post-content',
		'core/post-date',
		'core/post-excerpt',
		'core/post-featured-image',
		'core/post-terms',
		'core/post-title',
		'core/post-template',
		'core/query-loop',
		'core/query',
		'core/query-pagination',
		'core/query-pagination-next',
		'core/query-pagination-numbers',
		'core/query-pagination-previous',
		'core/query-title',
		'core/site-logo',
		'core/site-title',
		'core/site-tagline',
	];

	$disallowed_blocks = $FSE_blocks;
	// その他、オフにしたいブロックがあれば $disallowed_blocks に追加

	$allowed_blocks = array_diff( $allowed_blocks, $disallowed_blocks );
	$allowed_blocks = array_values( $allowed_blocks ); // array_valuesちゃんとしないと効かない
	return $allowed_blocks;
}, 99, 2);

ポイントは、WP_Block_Type_Registryを使って全ブロックを取得してからいらないものを削除している点です。

この手法の問題点

ブロックディレクトリからの検索が無効になってしまうという問題点があります。

個人的にはブロックディレクトリから検索することがないので大丈夫なのですが、販売しているテーマでは不具合になってしまうので、後述する方法に切り替えました。

JSで特定のブロックをオフにする方法

blocks.registerBlockTypeフックを使って、オフにしたいブロックを検出して{}を返します。

import { addFilter } from '@wordpress/hooks';
addFilter('blocks.registerBlockType', 'my-namespace/filter-blocks', function (settings, name) {
	const fseBlocks = [
		'core/loginout',
		'core/page-list',
		'core/post-content',
		'core/post-date',
		'core/post-excerpt',
		'core/post-featured-image',
		'core/post-terms',
		'core/post-title',
		'core/post-template',
		'core/query-loop',
		'core/query',
		'core/query-pagination',
		'core/query-pagination-next',
		'core/query-pagination-numbers',
		'core/query-pagination-previous',
		'core/query-title',
		'core/site-logo',
		'core/site-title',
		'core/site-tagline',
	];
	if (-1 !== fseBlocks.indexOf(name)) {
		return {};
	}
	return settings;
});

こうすることで、ブロックディレクトリからの検索は有効なまま、特定のブロックをオフにすることができました。

ただしこの手法の場合、オフにするブロックが過去に設置されていた場合、エディター上でブロックがクラッシュします。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次
閉じる