【WordPress】ブロックエディターで特定ブロックを禁止する方法(ユーザー権限別)

【WordPress】ブロックエディターで特定ブロックを禁止する方法(ユーザー権限別) WordPress

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などはエディターから非表示になります。

まとめ

ユーザー権限や投稿タイプに応じて使用できるブロックを制限することで、運用ミスの予防やデザインの統一が可能になります。ブロックエディターの柔軟性を維持しつつ、安全性と管理性を向上させる実装としておすすめです。