WordPressのブロックエディター(Gutenberg)は多機能で便利ですが、すべてのユーザーにすべてのブロックを使わせたくないケースもあります。特に複数人で投稿を管理しているサイトでは、ブロックの使用を制限することで、意図しないレイアウト崩れやセキュリティリスクを回避できます。
この記事では、ユーザーの権限に応じて、特定のブロックをブロックエディター上で非表示・無効化する方法を紹介します。
allowed_block_types_all フィルターを使う
WordPress 5.8以降では、allowed_block_types_allフィルターを使うことで、使用可能なブロックを制限できます。以下のコードをfunctions.phpに追加してください。
functions.php:権限・投稿タイプに応じたブロック制限
function restrict_blocks_by_user_role($allowed_blocks, $context) {
// 特定の投稿タイプにのみ制限を適用したい場合はここで判定
if ($context->post && $context->post->post_type !== 'post') {
return $allowed_blocks;
}
// 現在のユーザーを取得
$current_user = wp_get_current_user();
// 編集者・投稿者には制限をかける
if (in_array('editor', $current_user->roles, true) || in_array('author', $current_user->roles, true)) {
// 使用を許可するブロックのみを配列で指定(例:段落、見出し、画像)
return [
'core/paragraph',
'core/heading',
'core/image',
'core/list',
];
}
return $allowed_blocks;
}
add_filter('allowed_block_types_all', 'restrict_blocks_by_user_role', 10, 2);
このフィルターは、許可するブロックの配列(またはすべて許可するtrue)を返す仕組みです。第2引数の$context(WP_Block_Editor_Context)から、現在編集中の投稿情報($context->post)を参照できます。
禁止ブロックの指定方法
許可するブロックを明示的に列挙することで、それ以外のブロックはエディター上に表示されなくなります。ブロックのスラッグ名はcore/paragraph、core/imageなど、各ブロックの識別子を使用します。
主な標準ブロックの例:
- 段落ブロック:core/paragraph
- 見出しブロック:core/heading
- 画像ブロック:core/image
- カスタムHTMLブロック:core/html
- 埋め込みブロック:core/embed
よくある質問(FAQ)
QGutenbergで特定のブロックを管理者以外に使用禁止にするには?
Aallowed_block_types_allフィルターでロールに応じて許可ブロックリストを返します。current_user_can()やロール確認で制限内容を切り替えます。
Q特定ブロックを全ユーザーに対して無効にするには?
Aallowed_block_types_allフィルターで許可ブロックリストを返します。全ブロックを許可する場合はtrue、特定リストのみ許可するには配列でブロック名を返します。
Qカスタムブロックのみ使えるように標準ブロックを制限するには?
Aallowed_block_types_allでカスタムブロックのブロック名(my-plugin/my-block等)のみを含む配列を返します。これで標準のparagraph・headingなどはエディターから非表示になります。
まとめ
ユーザー権限や投稿タイプに応じて使用できるブロックを制限することで、運用ミスの予防やデザインの統一が可能になります。ブロックエディターの柔軟性を維持しつつ、安全性と管理性を向上させる実装としておすすめです。

