Migration de base de données WordPress avec Phinx
Pour créer des migrations Phinx tout en ayant accès aux fonctionnalités de WordPress, il suffit d’ajouter un include
du fichier wp-conf.php
dans le fichier de configuration phinx.php
qui est placé à la racine de votre projet lors de l’initialisation de l’utilitaire.
Ci-dessous un exemple pour une installation avec Bedrock (le répertoire web contenant l’application WP)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php require_once('web/wp-config.php'); global $wpdb; return [ 'paths' => [ 'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', 'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' ], 'environments' => [ 'default_migration_table' => "{$wpdb->prefix}phinxlog", ... ] ] |
Vous aurez ensuite accès à toutes les fonctionnalités de WordPress depuis vos fichiers de migrations, comme la variable globale $wpdb
pour les requêtes à la base de données et les classes et fonctions utiles pour vos manipulations de données (WP_Query
, wp_insert_post
etc.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php declare(strict_types=1); use Phinx\Migration\AbstractMigration; final class MigrateTable extends AbstractMigration { public function change(): void { global $wpdb; $table = $this->table('old_products'); $table->rename($wpdb->prefix.'products'); // wp_products $table->update(); //$query = new WP_Query([]); } } |
Pour aller plus loin avec Bedrock
Vous pouvez directement utiliser les constantes de configuration définies dans le fichier config/application.php
et tirées de votre fichier .env
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php use Roots\WPConfig\Config; require_once('web/wp-config.php'); return [ 'paths' => [ 'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', 'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' ], 'environments' => [ 'default_migration_table' => "{$wpdb->prefix}phinxlog", 'default_environment' => 'development', 'development' => [ 'adapter' => 'mysql', 'host' => Config::get('DB_HOST'), 'name' => Config::get('DB_NAME'), 'user' => Config::get('DB_USER'), 'pass' => Config::get('DB_PASSWORD'), 'port' => (strpos(Config::get('DB_HOST'),':')) ? explode(':',Config::get('DB_HOST'))[1] : '3306', 'charset' => Config::get('DB_CHARSET'), ], ], 'version_order' => 'creation' ]; |