データーベースに新しくテーブルを作成する:【59日目】WordPress1日1プラグイン


Warning: Use of undefined constant width - assumed 'width' (this will throw an Error in a future version of PHP) in /home/en3/paka3.net/public_html/wp-content/plugins/paka3_shortCodePostLinks/paka3_shortCodePostLinks.php on line 63

ようこそのお運びで、厚く御礼申し上げます。
59日目です。今回はデータベースにテーブルを作成します。

プラグインをインストール時に、データベースに新しくテーブルを作成(create table)する。

自作プラグインをインストールするときに、データベースに新しくテーブルを作成する。

今回は、既存のものとは別にあたらしいテーブルを作成する。

今まで、プラグインを作成した際、データの保存は既存のテーブルに保存していましたが、今回は新しくテーブルを作成してみようと思います。

※新しくテーブルを作成することで、自作プラグインが保存場所を独立してにもつことができ、保存、集計等色々自由がききそうです。

まずは一歩、今回の仕様は。

少しずつ作っていこうと思いますので今回は、

  • プラグインのインストール時に、テーブルを作成
  • 初期データを挿入する。

これでいきます。

プラグインのインストール時に実行する方法は、以下のページを参照してください


また、WordPressのデータベースのテーブル作成については以下のページを参照してください。
WordPress Codex 日本語版:Creating Tables with Plugins

プラグインファイルを作成していきます。

では、function.phpに以下のコードを書きました。

prefix)を付けてテーブル名を設定
       $this->table_name = $wpdb->prefix . 'paka3Table';
       register_activation_hook (__FILE__, array($this,'paka3_plugin_start'));
    }
  }
   //プラグインを有効化したとき(インストール)
   public function paka3_plugin_start(){
	 global $wpdb;
	 global $jal_db_version;
         if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) {
         $sql = "CREATE TABLE " . $this->table_name . " (
	         id mediumint(9) NOT NULL AUTO_INCREMENT,
	         created datetime DEFAULT NULL,
		 modified datetime DEFAULT NULL,
	         title tinytext NOT NULL,
	         contents text NOT NULL,
	         UNIQUE KEY id (id)
	        );";
		
	  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
	  dbDelta($sql);
	  $this->paka3_FirstData();
	  
	  add_option("paka3_db_version", $this->paka3_db_version);
	 }
    }
    //初期データのインストール
   public function paka3_FirstData(){
	global $wpdb;
        $title = $wpdb->escape("初めての投稿です");
        $contents = $wpdb->escape("インストールが完了しました");
	$wpdb->insert( $this->table_name,
                        array( 'title' => $title, 'contents' => $contents ),array( '%s', '%s' ));        
    }
}
?>

ポイントはどこ?

  • プラグインのインストール時に関数実行するには「register_activation_hook」を使用します。
    ※WordPress Codex 日本語版:register_activation_hook

      public function __construct(){
        global $wpdb;
        if(function_exists('register_activation_hook')) {
            // 接頭辞($wpdb->prefix)を付けてテーブル名を設定
           $this->table_name = $wpdb->prefix . 'paka3Table';
           register_activation_hook (__FILE__, array($this,'paka3_plugin_start'));
        }
      }
    
  • データベースに作成するテーブルが既にないかチェックを行います。
    if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) {
    ...
    }
  • SQL文:「CREATE TABLE」を使ってテーブルを作成します。
             $sql = "CREATE TABLE " . $this->table_name . " (
    	         id mediumint(9) NOT NULL AUTO_INCREMENT,
    	         created datetime DEFAULT NULL,
    		 modified datetime DEFAULT NULL,
    	         title tinytext NOT NULL,
    	         contents text NOT NULL,
    	         UNIQUE KEY id (id)
    	        );";
    
  • Codexに書いていますが、テーブルを作成するときは、直接SQLクエリを実行するよりdbDelta関数を使いましょう。
    「現在のテーブル構造を走査し、作成予定のテーブルと比較、必要に応じてテーブルを追加・修正します。更新にはとても便利な関数」だそうです。※ただし、若干制約があり。

             //※データベースにテーブルがないか確認
             if($wpdb->get_var("SHOW TABLES LIKE '$this->table_name'") != $this->table_name) {
    
               //##テーブルを作成する
               $sql = "SQL文";
    
               //dbDeltaを使ってSQLを実行
               require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
               dbDelta($sql);
    
               //*初期データが必要なら呼び出し
               //バージョンオプション
               add_option("jal_db_version", $this->jal_db_version);
    	 }
    
  • 初期データはテーブルを作成したら$wpdbを使って新しくレコードを作成します(関数paka3_FirstData ()参照)

コードをプラグイン用のファイルにします

それではfunction.phpに書いたコードを消して、
Paka3_DatabaseTable.php」というファイルを作成し、以下のコードを記入します。

このファイルを[wp-content]>「plugins」ディレクトリに入れ、管理画面で有効にして完了です。

今回のまとめ

今回はデータを扱うプラグイン作成の第一弾として、データベースのテーブルを作成してみました。今まで色々してきた部分の応用も出てきますが、WordPressでどこまでできるのか試してみようと思います。

wordpress1日1プラグイン

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です