WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
PHP
システム開発
[WordPress]プラグイン制作_DBテーブルの更新
システム開発担当のTFです。
※WordPress6.2対応
やり方
- プラグインの有効化時にテーブル更新の関数を動かす
- プラグインの更新でテーブル更新がある場合、プラグインロード時にテーブル更新の関数を動かす処理の追加
- optionに保存したDBテーブルバージョンと一致するか判定を行う
- dbDeltaの関数を用い、DBテーブルを更新する(すでにテーブルが存在した場合、自動で更新分のALTER TABLEが発行される)
参考
サンプル
<?php
/*
Plugin Name: SamplePlugin
Description: サンプルプラグイン
Version: 1.0
Author: MIX
Licence: GPL v2
Licence URI: https://www.gnu.org/licenses/gpl-2.0.html
*/
// DBテーブルバージョン
define( 'SAMPLE_DB_VER', '1.0' );
// プラグインが有効化された時呼ぶ関数の登録
register_activation_hook( __FILE__, 'initDB' );
// プラグイン更新でテーブル更新がある場合コメントアウト外す
// add_action('plugins_loaded', "initDB");
function initDB()
{
// DBバージョンが違えばTable更新
if (get_option('sample_db_version') != SAMPLE_DB_VER) {
updateTable();
}
}
function updateTable()
{
global $wpdb;
// dbDeltaの利用の為、読み込み
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
// 接頭子つける
$table_name = $wpdb->prefix . "sample";
// 文字コード
$charset_collate = '';
if (!empty($wpdb->charset)) {
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
} else {
$charset_collate = "DEFAULT CHARSET=utf8";
}
if (!empty($wpdb->collate)) {
$charset_collate .= " COLLATE $wpdb->collate";
}
// CREATE文
$sql = "CREATE TABLE " . $table_name . " (
id bigint(20) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
status smallint(6) DEFAULT 0,
title varchar(255) NOT NULL,
created_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
updated_at datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
)" . $charset_collate . ";";
// すでにテーブルが存在した場合は、ALTER TABLE が発行される
dbDelta($sql);
// バージョンをオプションに保存
update_option("sample_db_version", SAMPLE_DB_VER);
}