Using WordPress ‘block_categories’ PHP filter

The block_categories WordPress PHP filter modifies the default array of categories for block types.

Usage

add_filter('block_categories', 'my_custom_block_categories', 10, 2);
function my_custom_block_categories($block_categories, $post) {
    // Your custom code here
    return $block_categories;
}

Parameters

  • $block_categories (array): Array of categories for block types.
  • $post (WP_Post): Post being loaded.

More information

See WordPress Developer Resources: block_categories

Examples

Add a new category to block categories

Add a new custom category named “My Custom Category” to the block categories list.

add_filter('block_categories', 'add_my_custom_block_category', 10, 2);
function add_my_custom_block_category($block_categories, $post) {
    $block_categories[] = array(
        'slug' => 'my-custom-category',
        'title' => __('My Custom Category', 'textdomain'),
    );
    return $block_categories;
}

Remove a specific category from block categories

Remove the “Widgets” category from the block categories list.

add_filter('block_categories', 'remove_widgets_category', 10, 2);
function remove_widgets_category($block_categories, $post) {
    $block_categories = array_filter($block_categories, function ($category) {
        return $category['slug'] !== 'widgets';
    });
    return $block_categories;
}

Rename a specific category in block categories

Rename the “Common” category to “Frequently Used” in the block categories list.

add_filter('block_categories', 'rename_common_category', 10, 2);
function rename_common_category($block_categories, $post) {
    foreach ($block_categories as &$category) {
        if ($category['slug'] === 'common') {
            $category['title'] = __('Frequently Used', 'textdomain');
        }
    }
    return $block_categories;
}

Change the order of block categories

Move the “Layout” category to the top of the block categories list.

add_filter('block_categories', 'move_layout_category_to_top', 10, 2);
function move_layout_category_to_top($block_categories, $post) {
    usort($block_categories, function ($a, $b) {
        return $a['slug'] === 'layout' ? -1 : ($b['slug'] === 'layout' ? 1 : 0);
    });
    return $block_categories;
}

Conditionally add a new category for a specific post type

Add a new custom category named “Product Blocks” only for the “product” post type.

add_filter('block_categories', 'add_product_blocks_category', 10, 2);
function add_product_blocks_category($block_categories, $post) {
    if ($post->post_type === 'product') {
        $block_categories[] = array(
            'slug' => 'product-blocks',
            'title' => __('Product Blocks', 'textdomain'),
        );
    }
    return $block_categories;
}