条件
WordPress 5.3 でお送りします。
「works」というカスタム投稿タイプに「myblocks/block」というブロックを登録したいとします。
unregisterBlockType(JavaScript版)
registerBlockType
で登録したブロックは、unregisterBlockType
で解除できます。
domReady
の中に、getCurrentPostType
で投稿タイプを取得できるので、指定投稿タイプ以外のときに解除します。
import { registerBlockType, unregisterBlockType } from '@wordpress/blocks'; registerBlockType('myblocks/block', { // ブロックの処理 }); wp.domReady(() => { if (wp.data.select('core/editor').getCurrentPostType() !== 'works') { unregisterBlockType( 'myblocks/block' ); } });
そもそも指定した投稿タイプのときregisterBlockType
すればいい気がしますが、
registerBlockType
はdomReady
の後では登録できないようなので、こんな感じになりました。
allowed_block_types(PHP版)
allowed_block_types
フックを使えば使用するブロックをホワイトリストで指定することができます。
使用するブロックを配列で指定して、投稿タイプの条件で追加すればいけます。
全ての投稿ページで使用するブロックをコントロールしたい場合はこの方法がいいかもしれませんが、公式で追加された場合とかメンテが必要なのが難点です。
add_filter( 'allowed_block_types', function($allowed_block_types, $post) { $allowed_block_types = array( 'core/paragraph', 'core/heading', 'core/image', // その他の使うブロックも指定する ); if ( $post->post_type === 'works' ) { $allowed_block_types[] = 'myblocks/block'; } return $allowed_block_types; }, 10, 2 );
特定の投稿タイプのみ読み込む(PHP版)
ブロックのJSファイルはenqueue_block_editor_assets
フックで読み込むと思いますが、この部分で指定した投稿タイプで読み込まないようにする方法です。
もしinit
で読み込んでる場合は、enqueue_block_editor_assets
に変えても問題ないと思います。
create-guten-blockのように複数のブロックをまとめてビルドしているようなプラグインだと、全て使えなくなるので上記の方法がいいと思いますが、専用のプラグインで作っている場合はこの方法がスマートかもしれません。
add_action( 'enqueue_block_editor_assets', function($allowed_block_types, $post) { global $post_type; if ($post_type !== 'works') { return; } wp_register_style( // ... ); wp_register_script( // ... ); });
もっとスマートの方法があるかもしれませんが、以上になります。