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

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

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」のときだけ制限を適用
}

まとめ

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