wp-cli/super-admin-command
WP-CLI command package for WordPress multisite to manage super admins. List current super admin users, grant privileges to one or more users, or revoke them via wp super-admin list/add/remove, with multiple output formats supported.
super_admin), which is a core concept in WordPress but not natively exposed in Laravel. Requires bridging WordPress’s role system with Laravel’s auth system if used together.exec(), process() in Laravel)./wp-json/wp/v2/users) with custom Laravel middleware to manage super_admin capabilities.wp_usermeta table (via wp_capabilities and wp_user_roles). Laravel could interact with this table directly, but losing WP-CLI’s validation logic (e.g., multisite checks).| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| WP-CLI Dependency | Requires WP-CLI to be installed and configured. | Bundle WP-CLI with the Laravel app or enforce it as a deployment dependency. |
| Multisite Limitation | Only works in multisite installations. | Validate environment pre-integration or provide fallback logic for single-site setups. |
| Capability Sync | Laravel’s auth system may not recognize WordPress super_admin capabilities. |
Use a custom Laravel guard or event listeners to sync WordPress roles with Laravel permissions. |
| Error Handling | WP-CLI commands may fail silently or with WordPress-specific errors. | Wrap CLI calls in Laravel’s try-catch and log errors with context (e.g., user ID, action). |
| Concurrency | CLI commands are not atomic; race conditions possible when modifying user roles. | Implement database transactions or optimistic locking in Laravel before invoking WP-CLI. |
| Testing | Requires a WordPress multisite environment for local testing. | Use Dockerized WordPress multisite in CI/CD pipelines (e.g., wp-env). |
Why integrate WP-CLI into Laravel?
How will Laravel and WordPress interact?
exec())?What’s the failure mode tolerance?
Compliance & Auditing
SuperAdminAssigned, SuperAdminRevoked)?Performance
| Component | Compatibility | Workaround if Incompatible |
|---|---|---|
| Laravel | ✅ Works if WP-CLI is installed globally or in the project. | Bundle WP-CLI via Composer (wp-cli/wp-cli) or use Docker. |
| WordPress | ✅ Requires multisite installation. | Abort integration or provide single-site fallback (e.g., admin notice). |
| PHP Version | ✅ Supports PHP 7.4–8.2 (matches Laravel 9+/10+). | Use Laravel’s PHP version manager or containerize. |
| Database | ⚠️ Modifies wp_usermeta; conflicts if Laravel uses a different DB schema. |
Use a shared database or sync roles via Laravel events. |
| Authentication | ❌ Laravel’s auth system won’t natively recognize WordPress super_admin. |
Implement a custom Laravel guard or role provider to map WordPress capabilities. |
Assessment Phase
Proof of Concept
wp super-admin list) in the target environment.wp super-admin calls:
// app/Console/Commands/ManageSuperAdmins.php
public function handle() {
$users = $this->argument('users');
exec("wp super-admin add {$users}", $output, $returnVar);
if ($returnVar !== 0) {
throw new \RuntimeException("Failed to add super admins: " . implode("\n", $output));
}
}
Integration Layer
Process facade or exec() to invoke WP-CLI.
use Symfony\Component\Process\Process;
$process = new Process(['wp', 'super-admin', 'add', 'user@example.com']);
$process->run();
// routes/api.php
Route::post('/super-admin/add', [SuperAdminController::class, 'add']);
// SuperAdminController.php
public function add(Request $request) {
$user = User::where('email', $request->email)->first();
$user->add_role('administrator'); // WordPress plugin or custom logic
// Or call WP REST API directly:
// Http::post('https://wordpress-site/wp-json/wp/v2/users/' . $user->id, [
// 'roles' => ['administrator']
// ]);
}
Event-Driven Sync (Advanced)
// app/Providers/EventServiceProvider.php
protected $listen = [
'wp.super_admin_assigned' => [SuperAdminSyncListener::class, 'handle'],
];
composer require wp-cli/wp-cli --dev
| Task | Effort | Notes |
|---|---|---|
| WP-CLI Updates | Low | WP |
How can I help you explore Laravel packages today?