ludicdrive/wordpress-database-migrations

WordPress 管理数据库表架构升级和数据填充的库

安装: 152

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 0

分支: 28

类型:wp-cli-package

1.0.5 2023-06-16 12:49 UTC

This package is auto-updated.

Last update: 2024-09-11 22:03:11 UTC


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 数字进行标识。例如,11.0.11.1 等。
  • wp wdm migrate 命令将使用迁移的版本号而不是类名。例如,wp wdm migrate 2.0.1
  • 迁移文件名约定为 <version-number>.php。例如,1.php1.0.1.php2.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 的新类,具有正确的文件名和所有必要的模板代码。