Theme
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 wordpressWas passiert:
- Erkennung:
wp-config.phpoderwp-config-sample.phpmuss vorhanden sein. - 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) → ActivateVia WP-CLI:
bash
wp plugin activate peacock-cmswp-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.