WordPressプラグイン開発 – 【成功】オリジナルテーブルを追加する

[temp id=2]

お盆休み前の仕事も無事完了し、自由な時間が多少できたのでゴニョゴニョやってます。

プラグイン有効化時に実行する処理〜オリジナルテーブルを追加しテーブルに行を追加

何とかここまでできました。細かいことは置いといて、今のところはテーブルが追加できればいいんです。

プラグイン有効化時に実行する処理

プラグインのテーブルは、プラグインを有効化した時に作成します。すでにテーブルがある場合はアップデートします。なので、アクティベーションフックに登録する必要があります。アクティベーションフックとは、プラグインを有効化したときにWordPressに処理をひっかけるということです。

//必要なファイルを読み込む
require_once dirname(__FILE__).DIRECTORY_SEPARATOR."lib".DIRECTORY_SEPARATOR."client.class.php";

//インスタンスを初期化
global $kpc;
$version = 0.3;
$kpc = new Kpwp_Client($version);

//アクティベーションフックに登録
register_activation_hook(__FILE__, array($kpc, "activate"));

オリジナルテーブルを追加

ほぼこちらのブログのパクリです。パクリで申し訳ないですが、今の段階では、とにかく動くかどうかを確認しています。client.class.phpというファイルを別途作ってkpw_clientというテーブルを作成する関数を定義します。

//client.class.php

class Kpwp_Client{

var $table = "kpw_client";

function sql(){
$char = defined("DB_CHARSET") ? DB_CHARSET : "utf8";
return <<<EOS
CREATE TABLE {$this->table} (
`ID` BIGINT(11) NOT NULL AUTO_INCREMENT,
`object_id` BIGINT(11) NOT NULL,
`post_type` VARCHAR(45) NOT NULL,
`positive` BIGINT(11) NOT NULL,
`negative` BIGINT(11) NOT NULL,
`updated` DATETIME NOT NULL,
UNIQUE(`ID`)
) ENGINE = MyISAM DEFAULT CHARSET = {$char} ;
EOS;
}

function __construct(){
//初期化時にテーブル名を決定する
global $wpdb;
$this->db = $wpdb->prefix.$this->db;
//オプションからkpc_client_db_versionというデータを取得する。なければ0。
$this->db_version = get_option('kpc_client_db_version', 0);
}

function activate(){
global $wpdb;
//データベースが存在するか確認
$is_db_exists = $wpdb->get_var($wpdb->prepare("SHOW TABLES LIKE %s", $this->table));
if($is_db_exists){
//データベースが最新かどうか確認
if($this->db_version >= $this->version){
//必要なければ関数を終了
return;
}
}
//ここまで実行されているということはデータベース作成が必要
//必要なファイルを読み込み
require_once ABSPATH."wp-admin/includes/upgrade.php";
//dbDeltaを実行
//データベースが作成されない場合はSQLにエラーがあるので、
//$wpdb->show_errors(); と書いて確認してください
dbDelta($this->sql());
//データベースのバージョンを保存する
update_option("kpc_client_db_version", $this->version);
}

}

?>

テーブルに行を追加

できたkpw_clientテーブルに行を追加しデーターを入れます。

//client.php

//テーブルに行を追加
$tablenane = 'kpw_client';

global $wpdb;
$wpdb->insert( 
$tablenane, 
array( 
'positive' => 1, 
'negative' => 2
), 
array( 
'%d', 
'%d'
) 
);

phpMyAdminで確認する

実行するたびに行が追加されてしまいますが、とりあえず動いているようです。

やったー!

意味のないデーターですが追加されています。

あとは、こいつを「顧客」ページで読み出してやるだけ。

まとめ

やっぱプラグイン開発の勉強にはまとまった時間が必要ですね。あせってやると何がなんだかわからなくなってしまいます。

仕事も夏休みに入ったことだし、可能な限り順を追ってコツコツやっていこうと思います。

追記
実はこの方法ではテーブル名にプレフィックスが追加できません。以下の記事で改善方法を書いていますので御覧ください。

https://www.kantan-pro.com/wordpress%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e9%96%8b%e7%99%ba-%e3%80%90%e6%88%90%e5%8a%9f%e3%80%91%e4%bb%8a%e5%ba%a6%e3%81%93%e3%81%9d%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/

[temp id=1]
シェアする
購入する
購入する