The allowed_block_types WordPress PHP filter lets you control the block types available for the editor.
Usage
add_filter('allowed_block_types', 'your_function_name', 10, 2); function your_function_name($allowed_block_types, $post) { // your custom code here return $allowed_block_types; }
Parameters
$allowed_block_types
: bool|string[] — Array of block type slugs, or boolean to enable/disable all. Default true (all registered block types supported).$post
: WP_Post — The post resource data.
More information
See WordPress Developer Resources: allowed_block_types
Examples
Restrict block types for a specific post type
function restrict_block_types_for_post_type($allowed_block_types, $post) { if ($post->post_type == 'custom_post_type') { $allowed_block_types = array('core/paragraph', 'core/image'); } return $allowed_block_types; } add_filter('allowed_block_types', 'restrict_block_types_for_post_type', 10, 2);
Disable all blocks except specific ones
function disable_all_blocks_except_specific($allowed_block_types, $post) { $allowed_block_types = array('core/paragraph', 'core/heading'); return $allowed_block_types; } add_filter('allowed_block_types', 'disable_all_blocks_except_specific', 10, 2);
Enable all blocks for a specific user role
function enable_all_blocks_for_role($allowed_block_types, $post) { $user = wp_get_current_user(); if (in_array('administrator', $user->roles)) { $allowed_block_types = true; } return $allowed_block_types; } add_filter('allowed_block_types', 'enable_all_blocks_for_role', 10, 2);
Disable a specific block type for a category
function disable_specific_block_for_category($allowed_block_types, $post) { if (has_category('restricted-category', $post)) { $disabled_block = 'core/video'; $allowed_block_types = array_diff($allowed_block_types, array($disabled_block)); } return $allowed_block_types; } add_filter('allowed_block_types', 'disable_specific_block_for_category', 10, 2);
Disable all block types
function disable_all_block_types($allowed_block_types, $post) { return false; } add_filter('allowed_block_types', 'disable_all_block_types', 10, 2);