Осваиваем практику миграций в WordPress на базе плагина wp-migrations.
Рассмотрим полезную библиотеку WordPress для обновления схем таблиц базы данных и заполнения данных.
Вводные
Когда-либо приходилось создавать пользовательскую таблицу для использования плагина или пользовательского кода? Чтобы поддерживать сайт в актуальном состоянии с последней версией этой таблицы, вам необходимо отслеживать, на какой версии находится таблица. Это может стать излишне сложным для большого количества таблиц.
Этот пакет вдохновлен миграциями базы данных Laravel. Вы создаете новый файл миграции PHP, добавляете код обновления схемы и при необходимости включаете метод отката изменений.
Просто запустите wp dbi migrate
в командной строке с помощью WP CLI, и все миграции, которые еще не были выполнены, будут выполнены.
Великое преимущество использования миграций для обновления схемы базы данных и данных состоит в том, что изменения основаны на файлах и, следовательно, могут быть сохранены в системе контроля версий, что дает вам больший контроль при работе с разными ветками.
Требования
Этот пакет предназначен для использования в проекте сайта WordPress, а не плагина или темы.
Для его работы требуется PHP версии 5.3 или выше.
У вас должен быть доступ для запуска WP CLI на сервере. Обычно wp dbi migrate
запускается в качестве последнего этапа сборки в процессе развертывания.
Установка
composer require deliciousbrains/wp-migrations
- Инициализируйте пакет, добавив
\DeliciousBrains\WPMigrations\Database\Migrator::instance();
в mu-плагин.
Миграции
По умолчанию, команда будет искать файлы миграции в каталоге /app/migrations
рядом с каталогом поставщика. Это можно изменить с помощью фильтра dbi_wp_migrations_path
. Другие пути могут быть добавлены с помощью фильтра dbi_wp_migrations_paths
.
Имена файлов миграции должны соответствовать формату yyyy_mm_dd_имякласса
, например, 2020_04_09_AddCustomTable.php
Пример миграции для создания таблицы выглядит следующим образом:
2020_04_09_AddCustomTable.php
<?php
use DeliciousBrains\\\\WPMigrations\\\\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');
}
}
Мы также используем миграции для развертывания изменений данных разработки во время развертывания. Вместо попытки объединить базу данных разработки с производственной.
Например, чтобы добавить новую страницу:
<?php
use DeliciousBrains\\\\WPMigrations\\\\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 dbi migrate AddCustomTable
.
Чтобы откатить все миграции, вы можете запустить wp dbi migrate --rollback
, или только определенную миграцию wp dbi migrate AddCustomTable --rollback
.
Чтобы быстро создать новую миграцию, вы можете запустить wp scaffold migration <имя>
. Например, wp scaffold migration MyMigration
создаст новый класс с именем MyMigration
в каталоге файлов миграции по умолчанию с правильным именем файла и всем необходимым шаблонным кодом.