PHP code example of mrkindy / multi-tenant-wordpress
1. Go to this page and download the library: Download mrkindy/multi-tenant-wordpress library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use MrKindy\MultiTenantWordPress\DTO\CreateTenant;
use MrKindy\MultiTenantWordPress\DTO\ProvisioningAdminCredentials;
use MrKindy\MultiTenantWordPress\Encryption\EncryptionService;
use MrKindy\MultiTenantWordPress\Provisioning\DatabaseManager;
use MrKindy\MultiTenantWordPress\Provisioning\DatabaseNameGenerator;
use MrKindy\MultiTenantWordPress\Provisioning\TenantProvisioner;
use MrKindy\MultiTenantWordPress\Provisioning\WordPressBootstrapper;
use MrKindy\MultiTenantWordPress\Provisioning\WordPressInstaller;
use MrKindy\MultiTenantWordPress\Provisioning\DefaultDataSeeder;
use MrKindy\MultiTenantWordPress\Provisioning\AdminAccountSeeder;
use MrKindy\MultiTenantWordPress\Provisioning\AdditionalSeeder;
use MrKindy\MultiTenantWordPress\Repository\PdoTenantRepository;
use MrKindy\MultiTenantWordPress\Secrets\EncryptedSecretProvider;
// Services
$encryption = new EncryptionService($encryptionKey);
$repository = new PdoTenantRepository($controlPdo);
$databaseManager = new DatabaseManager($controlPdo);
$secretProvider = new EncryptedSecretProvider($encryption);
$bootstrapper = new WordPressBootstrapper('/var/www/bedrock');
$provisioner = new TenantProvisioner(
$repository,
$secretProvider,
$databaseManager,
new WordPressInstaller($bootstrapper),
new DefaultDataSeeder($bootstrapper),
new AdminAccountSeeder($bootstrapper),
new AdditionalSeeder($bootstrapper),
);
// Create tenant with encrypted password
$tenantPassword = bin2hex(random_bytes(32));
$tenant = $repository->create(new CreateTenant(
domain: 'shop.example.com',
databaseHost: 'tenant-db.internal',
databasePort: 3306,
databaseName: 'tenant_shop',
databaseUser: 'tenant_shop_user',
encryptedDatabasePassword: $encryption->encrypt($tenantPassword),
status: 'pending',
plan: 'business',
metadata: [],
));
// Provision
$result = $provisioner->provision(
$tenant,
new ProvisioningAdminCredentials(
username: 'admin',
email: '[email protected]',
password: bin2hex(random_bytes(16)),
)
);
echo "Provisioned: {$result->tenant->domain}\n";
echo "Admin: {$result->adminCredentials->username}\n";
use MrKindy\MultiTenantWordPress\Events\TenantCreated;
use MrKindy\MultiTenantWordPress\Provisioning\ProvisionTenantListener;
use MrKindy\MultiTenantWordPress\Queue\SynchronousJobDispatcher;
// Create event dispatcher (or use Laravel/Symfony)
$dispatcher = new InMemoryEventDispatcher();
// Subscribe listener
$listener = new ProvisionTenantListener(
new SynchronousJobDispatcher(), // Replace with your queue
);
$dispatcher->subscribe(TenantCreated::class, $listener);
// Dispatch event after creating tenant
$dispatcher->dispatch(new TenantCreated($tenant));