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);
}