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