WordPressプラグイン作成教程(五):新規データテーブル作成

7065 ワード

前回はデータをデータベースに保存するにはどうすればいいですか?について説明しましたが、今日は新しいデータテーブルを作成するということです.つまりプラグインをアクティブにすると、このデータベースの下に新しいデータテーブルを作成します.原理は簡単です.プラグインをアクティブにするとデータベースを作成するコードを実行します.次のコードを見てください
<?php

/**

 * @package      

 * @version 1.0

 */

/*

Plugin Name:      

Plugin URI: http://www.cnblogs.com/fxmbz/p/4060296.html

Description:            ,       ,                 

Author: myname

Version: 1.0

Author URI: http://www.cnblogs.com/fxmbz

*/



//                       WordPress   

define('MY_PLUGIN_VERSION_NUM', '1.0');

define('MY_PLUGIN_MINIMUM_WP_VERSION', '4.0');



//       $wpdb         

global $wpdb;

define('MY_NEW_TABLE', $wpdb->prefix . 'mynewtable');





//      ,           ,  WP   options         

register_activation_hook(__FILE__, 'plugin_activation_cretable');

function plugin_activation_cretable() {

    global $wpdb;

    /*

     * We'll set the default character set and collation for this table.

     * If we don't do this, some characters could end up being converted 

     * to just ?'s when saved in our table.

     */

    $charset_collate = '';



    if (!empty($wpdb->charset)) {

      $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset}";

    }



    if (!empty( $wpdb->collate)) {

      $charset_collate .= " COLLATE {$wpdb->collate}";

    }



    $sql = "CREATE TABLE " . MY_NEW_TABLE . " (

        id mediumint(9) NOT NULL AUTO_INCREMENT,

        time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

        name tinytext NOT NULL,

        text text NOT NULL,

        url varchar(55) DEFAULT '' NOT NULL,

        UNIQUE KEY id (id)

    ) $charset_collate;";



    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

    dbDelta( $sql );



    // update_option()  , options           ,       ,        

    update_option('my_plugin_version_num', MY_PLUGIN_VERSION_NUM);

}



//      ,               , 

register_activation_hook(__FILE__, 'plugin_activation_insertdate');

function plugin_activation_insertdate() {

    global $wpdb;

    

    $data['name'] = '    ';

    $data['text'] = '        !';

    $data['url']  = 'http://www.cnblogs.com/fxmbz';



    $wpdb->insert(MY_NEW_TABLE, $data);

}



//       ,                 ,

add_action('plugins_loaded', 'myplugin_update_db_check');

function myplugin_update_db_check() {

    //    options                     ,       ,      

    if (get_option('my_plugin_version_num') != MY_PLUGIN_VERSION_NUM) {

        plugin_activation_cretable();

    }

}



//      ,           ,  options        

register_deactivation_hook(__FILE__, 'plugin_deactivation_deltable');

function plugin_deactivation_deltable() {

    global $wpdb;



    $wpdb->query("DROP TABLE IF EXISTS " . MY_NEW_TABLE);

    delete_option('my_plugin_version_num');

}
 
基本的にはWordPressデータベース関連関数を使って動作します.これはみなさんによく知ってもらいたいです.公式文書:http://codex.wordpress.org/Creating_Tableswith_Plugins