До сих пор я использовал этот код в register_activation_hook
для всех своих таблиц:
$playlist_table = $wpdb->prefix . "app_playlists";
if($wpdb->get_var( "show tables like '$playlist_table'" ) != $playlist_table){
$sql = "CREATE TABLE $playlist_table (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) $charset_collate;";
dbDelta( $sql );
}
Затем в действии plugins_loaded я проверяю версию плагина, а затем иногда добавляю некоторые столбцы в таблицу, удаляю или, возможно, изменяю некоторые столбцы.
Это растягивает код таблицы в разных местах, затрудняя его поддержку. Мне было интересно, могу ли я написать CREATE TABLE
таким образом, чтобы все мои изменения в таблице были в одном месте, а wpdb просто обновил бы таблицу самостоятельно?
Например, давайте предположим, что моя таблица теперь выглядит так после всех обновлений:
$sql = "CREATE TABLE $playlist_table (
`id` int(11) NOT NULL AUTO_INCREMENT,
`major_title` varchar(300) NOT NULL,
`new_column` varchar(500) NOT NULL,
`some_other_new_column` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) $charset_collate;";
dbDelta( $sql );