ludicdrive / wordpress-database-migrations
WordPress 管理数据库表架构升级和数据填充的库
Requires
- php: >=5.4
- wp-cli/wp-cli-bundle: ^2.2.0
README
WordPress 管理数据库表架构升级和数据填充的库。
是否曾需要为某些插件或自定义代码创建自定义表?为了保持网站使用该表的最新版本,您需要跟踪表所在的版本。对于许多表,这可能变得过于复杂。
此包是从 deliciousbrains/wp-migrations 分支出来的,并整合了来自 https://github.com/desaiuditd/enhanced-wp-migrations 的更改。
您创建一个新的迁移 PHP 文件,添加您的架构更新代码,并可选地包含一个回滚方法以撤销更改。
使用 WP CLI 在命令行上运行 wp wdm migrate,任何尚未运行的迁移都将被执行。
使用迁移进行数据库架构和数据更新的好处在于,这些更改是文件基础的,因此可以存储在版本控制中,让您在跨不同分支工作时具有更好的控制。
要求
此包旨在在 WordPress 网站项目中使用,而不是用于插件或主题。
它需要运行 PHP 5.4 或更高版本。
您需要有权在服务器上运行 WP CLI。通常 wp wdm migrate 将作为部署过程中的最后一步构建步骤运行。
enhanced-wp-migrations 引入的 wp-migrations 的主要差异
- 删除了对多个迁移目录的支持。我假设您的所有迁移文件都应位于同一位置。这样,包可以遵循 SemVer 在迁移名称和文件名中(类似于 Flyway)。
- 单个迁移将通过其相应的 semver 数字进行标识。例如,
1、1.0.1、1.1等。 wp wdm migrate命令将使用迁移的版本号而不是类名。例如,wp wdm migrate 2.0.1- 迁移文件名约定为
<version-number>.php。例如,1.php、1.0.1.php、2.1.php等。通常,您可以从0.0.1.php开始迁移。 - 请确保每个迁移文件中只包含一个类。
enhanced-wp-migrations 与 enhanced-wp-migrations 的主要差异
- 构建迁移
安装
composer require ludicdrive/wordpress-database-migrations- 通过将
\LudicDrive\WordpressDatabaseMigrations\Database\Migrator::instance();添加到 mu-plugin 来启动包。 - 在服务器上运行
wp wdm migrate --setup。
mu-plugin
对于 mu-plugin,在 wp-content 目录下的 mu-plugins 目录中添加一个 PHP 文件(例如 wp-migrate.php)。文件名无关紧要。
文件的最小内容
<?php // If this file is called directly, abort. if (!defined('WPINC')) { die; } /** * Instantiates the plugin and and initializes the functionality necessary for * WordPress. */ require_once '<ABSOLUTE-PATH-TO>/wp-cli/.packages/vendor/autoload.php'; $migrator = \LudicDrive\WordpressDatabaseMigrations\Database\Migrator::instance();
迁移
默认情况下,命令将在包文件夹(在 wordpress-database-migrations 中)内的 /app/migrations 目录中查找迁移文件。这可以通过过滤器 wdm_wp_migrations_path 进行更改。
例如,创建表的迁移示例
<!-- 0.0.1.php --> <?php use LudicDrive\WordpressDatabaseMigrations\Database\AbstractMigration; class AddCustomTable extends AbstractMigration { public function run() { global $wpdb; $sql = " CREATE TABLE " . $wpdb->prefix . "my_table ( id bigint(20) NOT NULL auto_increment, some_column varchar(50) NOT NULL, PRIMARY KEY (id) ) {$this->get_collation()}; "; dbDelta( $sql ); } public function rollback() { global $wpdb; $wpdb->query( 'DROP TABLE ' . $wpdb->prefix . 'my_table'); } }
例如,要添加新页面
<!-- 0.0.1.php --> <?php use LudicDrive\WordpressDatabaseMigrations\Database\AbstractMigration; class AddPricingPage extends AbstractMigration { public function run() { $pricing_page_id = wp_insert_post( array( 'post_title' => 'Pricing', 'post_status' => 'publish', 'post_type' => 'page', ) ); update_post_meta( $pricing_page_id, '_wp_page_template', 'page-pricing.php' ); } }
使用
运行迁移
您可以使用文件名作为参数运行特定的迁移,例如 wp wdm migrate 2.1.1。
回滚迁移
要回滚所有迁移,您可以运行 wp wdm migrate --rollback,或者仅回滚特定的迁移 wp wdm migrate 2.1.1 --rollback。
迁移模板
要创建一个新的迁移,运行 wp scaffold migration <名称>。
例如,wp scaffold migration MyMigration 将在默认迁移文件目录中创建一个名为 MyMigration 的新类,具有正确的文件名和所有必要的模板代码。