WordPress插件制作教程(五): 创建新的数据表

十度 wordpress 2015年12月01日 收藏

上一篇讲解了怎样将数据保存到数据库,今天为大家讲解创建新的数据表,也就是说当我们激活插件的时候,会在该数据库下面创建一个新的数据表出来。原理很简单,激活插件的时候运行创建数据库的代码。看下面代码:

  1. <?php
  2. /**
  3. * @package 创建数据表
  4. * @version 1.0
  5. */
  6. /*
  7. Plugin Name: 创建数据表
  8. Plugin URI: http://www.cnblogs.com/fxmbz/p/4060296.html
  9. Description: 这是一款简单的插件样例,激活插件的时候,会在该数据库下面创建一个新的数据表
  10. Author: myname
  11. Version: 1.0
  12. Author URI: http://www.cnblogs.com/fxmbz
  13. */
  14.  
  15. // 声明常量来存储插件版本号 和 该插件最低要求WordPress的版本
  16. define('MY_PLUGIN_VERSION_NUM', '1.0');
  17. define('MY_PLUGIN_MINIMUM_WP_VERSION', '4.0');
  18. // 声明全局变量$wpdb 和 数据表名常量
  19. global $wpdb;
  20. define('MY_NEW_TABLE', $wpdb->prefix . 'mynewtable');
  21. // 插件激活时,运行回调方法创建数据表, 在WP原有的options表中插入插件版本号
  22. register_activation_hook(__FILE__, 'plugin_activation_cretable');
  23. function plugin_activation_cretable() {
  24. global $wpdb;
  25. /*
  26. * We'll set the default character set and collation for this table.
  27. * If we don't do this, some characters could end up being converted
  28. * to just ?'s when saved in our table.
  29. */
  30. $charset_collate = '';
  31. if (!empty($wpdb->charset)) {
  32. $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset}";
  33. }
  34. if (!empty( $wpdb->collate)) {
  35. $charset_collate .= " COLLATE {$wpdb->collate}";
  36. }
  37. $sql = "CREATE TABLE " . MY_NEW_TABLE . " (
  38. id mediumint(9) NOT NULL AUTO_INCREMENT,
  39. time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  40. name tinytext NOT NULL,
  41. text text NOT NULL,
  42. url varchar(55) DEFAULT '' NOT NULL,
  43. UNIQUE KEY id (id)
  44. ) $charset_collate;";
  45. require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
  46. dbDelta( $sql );
  47. // update_option()方法,在options表里如果不存在更新字段,则会创建该字段,存在则更新该字段
  48. update_option('my_plugin_version_num', MY_PLUGIN_VERSION_NUM);
  49. }
  50. // 插件激活时,运行回调方法在数据表中插入数据,
  51. register_activation_hook(__FILE__, 'plugin_activation_insertdate');
  52. function plugin_activation_insertdate() {
  53. global $wpdb;
  54. $data['name'] = '我的博客';
  55. $data['text'] = '欢迎来到我的博客!';
  56. $data['url'] = 'http://www.cnblogs.com/fxmbz';
  57. $wpdb->insert(MY_NEW_TABLE, $data);
  58. }
  59. // 当加载插件时,运行回调方法检查插件版本是否有更新,
  60. add_action('plugins_loaded', 'myplugin_update_db_check');
  61. function myplugin_update_db_check() {
  62. // 获取到options表里的插件版本号 不等于 当前插件版本号时,运行创建表方法,更新数据库表
  63. if (get_option('my_plugin_version_num') != MY_PLUGIN_VERSION_NUM) {
  64. plugin_activation_cretable();
  65. }
  66. }
  67. // 插件停用时,运行回调方法删除数据表,删除options表中的插件版本号
  68. register_deactivation_hook(__FILE__, 'plugin_deactivation_deltable');
  69. function plugin_deactivation_deltable() {
  70. global $wpdb;
  71. $wpdb->query("DROP TABLE IF EXISTS " . MY_NEW_TABLE);
  72. delete_option('my_plugin_version_num');
  73. }

 

基本都是使用的WordPress数据库相关函数来操作的,这个需要大家熟悉一下。官方文档:http://codex.wordpress.org/Creating_Tables_with_Plugins