Skip to content

Integration: WordPress

Status: Produktiv seit 2026-05-20. Nutzt das eingebaute wp_remote_get — keine Composer-Dependency und keine externen Bibliotheken.

WordPress unterscheidet sich von den anderen Integrationen: kein .env, kein Package Manager, kein File-based Routing. Stattdessen: ein WordPress-Plugin, das einen Shortcode + Template-Tag registriert.

60-Sekunden-Setup

bash
# Im Root deiner WordPress-Installation (wp-config.php muss existieren):
npx @peacock/cli init wordpress

Was passiert:

  1. Erkennung: wp-config.php oder wp-config-sample.php muss vorhanden sein.
  2. Scaffold von wp-content/plugins/peacock-cms/peacock-cms.php — ein minimales Plugin (~120 Zeilen).

Das CLI editiert nicht wp-config.php automatisch — diese Datei ist zu sensibel. Die drei define()-Zeilen für die Konfiguration musst du selbst einfügen.

Aktivierung

Via WP-Admin:

Plugins → Peacock CMS (auto-generated) → Activate

Via WP-CLI:

bash
wp plugin activate peacock-cms

wp-config.php

Drei Zeilen einfügen — oberhalb der That's all, stop editing!-Zeile:

php
define('PEACOCK_API_BASE_URL', 'https://your-host.example/v1');
define('PEACOCK_SPACE', 'your-space-slug');
define('PEACOCK_TOKEN', 'your-public-read-token');

Verwendung

Shortcode (im Block- oder Classic-Editor)

[peacock path="/about"]

Template-Tag (in PHP-Themes)

php
<?php echo peacock_render_shortcode(['path' => '/about']); ?>

Raw-Story-Fetch (für eigenes Rendering)

php
$story = peacock_fetch_story('/about');

if ($story !== null) {
    foreach (($story['content']['body'] ?? []) as $block) {
        switch ($block['_component']) {
            case 'hero':
                echo '<h1>' . esc_html($block['headline']) . '</h1>';
                break;
            case 'faq':
                // ...
        }
    }
}

Sicherheit

Das Plugin nutzt wp_remote_get mit 5-Sekunden-Timeout — keine SSRF-Risiken (URL fest auf PEACOCK_API_BASE_URL), keine User-Input-Interpolation in die URL ohne urlencode().

Alle Werte werden mit esc_html / wp_json_encode escapet, bevor sie ausgegeben werden — kein XSS-Risiko, selbst wenn Peacock-Content kompromittiert wird.

Override für eigene Themes

Das default-Rendering von peacock_render_shortcode ist absichtlich minimal (gibt JSON aus). Theme-Autoren überschreiben in functions.php:

php
function my_theme_peacock_render($atts) {
    $story = peacock_fetch_story($atts['path'] ?? '/');
    if ($story === null) return '';

    ob_start();
    foreach (($story['content']['body'] ?? []) as $block) {
        get_template_part('blocks/' . $block['_component'], null, ['data' => $block]);
    }
    return ob_get_clean();
}

// Default deregistrieren und eigenes registrieren
remove_shortcode('peacock');
add_shortcode('peacock', 'my_theme_peacock_render');

Dann legst du wp-content/themes/<your-theme>/blocks/hero.php, faq.php, etc. an — WordPress-idiomatisch.

Was noch fehlt

  • Wp.org-Plugin: Phase-9. Das CLI scaffolt einen lokalen wp-content/plugins/peacock-cms/-Ordner; das offizielle Wp.org-Verzeichnis-Plugin (wp plugin install peacock-cms) kommt später.
  • Gutenberg-Block: Dedicated Block-Editor-Integration (mit Sidebar-Picker für Peacock-Spaces/Stories) ist ebenfalls Phase-9.