Alle verfügbaren Blöcke auflisten unter Werkzeuge

PHP
<?php
/**
 * Admin-Seite: Alle registrierten Blöcke auflisten
 */
add_action('admin_menu', function () {
    add_management_page(
        'Verfügbare Blöcke',
        'Verfügbare Blöcke',
        'manage_options',
        'available-blocks',
        function () {
            $registry = WP_Block_Type_Registry::get_instance();
            $all     = $registry->get_all_registered();

            // Sortieren nach Namespace/Name
            ksort($all);

            echo '<div class="wrap"><h1>Verfügbare Blöcke</h1>';
            echo '<p>Quelle = "core" oder der Namespace des Plugins/Themes (alles vor dem Slash).</p>';
            echo '<table class="widefat striped"><thead><tr>';
            echo '<th>#</th><th>Block Name</th><th>Title</th><th>Quelle</th><th>Render (PHP)</th>';
            echo '</tr></thead><tbody>';

            $i = 1;
            foreach ($all as $name => $type) {
                $ns = strpos($name, '/') !== false ? strtok($name, '/') : $name;
                $title = isset($type->title) ? esc_html($type->title) : '';
                $has_render = !empty($type->render_callback) ? 'ja' : 'nein';
                printf(
                    '<tr><td>%d</td><td><code>%s</code></td><td>%s</td><td><code>%s</code></td><td>%s</td></tr>',
                    $i++,
                    esc_html($name),
                    $title,
                    esc_html($ns),
                    esc_html($has_render)
                );
            }

            echo '</tbody></table>';
            echo '<p><em>Hinweis:</em> „Render (PHP) = ja“ bedeutet, dass der Block serverseitig rendert (Dynamic Block).</p>';
            echo '</div>';
        }
    );
});