RH Blueprint archived self-updates
Wiederverwendbares WordPress-Basis-Plugin: Settings-Hub, Dashboard-Cleanup, DB-Tools, Peer-to-Peer Sync und GitHub Auto-Update.
by Robin Herbeck · github.com/herbeckrobin/rh-blueprint · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/herbeckrobin/rh-blueprint/archive/refs/heads/main.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Wiederverwendbares WordPress-Basis-Plugin von Robin Herbeck. Wird als Grundgerüst in jedes neue Kundenprojekt eingebaut und updatet sich automatisch über GitHub Releases.
Features
- Settings-Page mit Tab-Kategorien, Live-Suche und pro-Tab isolierten Option-Groups
- Dashboard-Cleanup ersetzt die WordPress-Default-Widgets durch ein eigenes Widget (Support-Box, Quick-Links, erweiterbare Sections)
- DB-Tools für Export, Import und Restore. Pure PHP, kein
mysqldump, läuft auf Shared Hosting - Sync Network für Peer-to-Peer Sync zwischen WordPress-Instanzen über REST-API und HMAC-SHA256
- Auto-Update über GitHub Releases, eingehängt in die native WP-Update-Mechanik
Voraussetzungen
- WordPress 6.5+
- PHP 8.1+
Installation
- Neueste ZIP aus Releases laden
- In WordPress unter Plugins → Installieren → Plugin hochladen
- Aktivieren
- Unter Einstellungen → RH Blueprint konfigurieren
Updates
Das Plugin prüft GitHub regelmäßig auf neue Releases (via plugin-update-checker). Updates erscheinen unter Dashboard → Aktualisierungen wie normale Plugin-Updates.
Release-Workflow
- Version in
rh-blueprint.phpbumpen (* Version: 0.5.0) - Commit und Push auf
main - Tag erstellen und pushen:
git tag v0.5.0 git push origin v0.5.0 - Die Action
release.ymlbaut ZIP und Release automatisch (Tag-Version muss exakt mit dem Plugin-Header übereinstimmen, sonst bricht sie ab) - Aktive Sites sehen das Update innerhalb von 12h (WP-Cron-Default)
Entwicklung
composer install # Dependencies
vendor/bin/phpstan analyse # Statische Analyse (Level 5)
cd ../../ && ddev start && ddev launch # Lokales Test-WordPress
Das Plugin ist per Symlink in Code/wp/wp-content/plugins/rh-blueprint eingebunden.
Architektur
rh-blueprint/
├── rh-blueprint.php # Plugin-Header, Autoloader, Bootstrap
├── composer.json # PSR-4 RhBlueprint\ -> inc/
├── vendor/ # Committed (Shared-Hosting-Kompatibilität)
├── inc/
│ ├── Plugin.php # Singleton-Bootstrap
│ ├── helpers.php # Globale Helper
│ ├── UpdateChecker.php # GitHub Auto-Update
│ ├── Settings/ # Tab-basierte Settings-Page
│ ├── Admin/ # Dashboard-Cleanup, Widget, DB-Tools
│ ├── Db/ # BackupStorage, Exporter, Importer, SearchReplace
│ └── Sync/ # Peer-Registry, HMAC-Auth, Sync-Network
├── assets/ # Admin-Assets
└── .github/workflows/ # Release-Automation
Sync Network
Beim Pull/Push dumpt der Exporter die Datenbank und importiert sie auf der Ziel-Seite. LocalOptionGuard und SyncDefaults::excludedTables() schützen site-spezifische Daten vor dem Überschreiben.
Geschützt (bleiben auf dem Ziel unverändert): plugin-eigene Options (rhbp_*), Site-Identität (siteurl, home, admin_email), Plugin-Aktivierung (active_plugins), cron, rewrite_rules, Hosting-Pfade, WP-Core-SMTP, DB-Schema-Versionen, Update-Transients sowie Options von Limit Login, WP Mail SMTP und WPS Hide Login.
Vom Export ausgeschlossen: wp_actionscheduler_* und wp_woocommerce_sessions.
Erweiterbar via Filter:
add_filter('rh-blueprint/sync/preserved_option_names', fn(array $n) => [...$n, 'custom_api_key']);
add_filter('rh-blueprint/sync/preserved_option_patterns', fn(array $p) => [...$p, 'my\\_plugin\\_%']);
add_filter('rh-blueprint/sync/excluded_tables', function (array $t) {
global $wpdb;
$t[] = $wpdb->prefix . 'visitor_tracking';
return $t;
});
Bekannte Grenzen
wp_users+wp_usermetawerden komplett gesynct. Admin-Passwörter wandern mit, der User-Satz auf dem Ziel wird ersetzt. Für lokal → Stage im selben Projekt unkritisch, für echte Kunden-Syncs ein Problem. EinUserGuardist geplant.- Kein Background-Job-Modus. Export und Import laufen synchron im REST-Request. DBs über ~50 MB können ins HTTP-Timeout laufen. Action-Scheduler-Integration ist geplant.
- Kein Rate-Limiting. Ein Peer mit gültigem Token kann beliebig viele Syncs triggern.
- Keine Medien. Nur Datenbank-Tabellen werden transferiert, Upload-Files nicht. Dafür braucht es zusätzlich
rsynco.ä.
Lizenz
GPL-2.0-or-later