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


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

    <?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_Tables_with_Plugins

  • 相关阅读:
    数据库中Schema(模式)概念的理解
    git错误处理
    mysql存储过程
    bunyan
    golang 小问题
    操作系统
    数据库优化
    内存控制
    MySQL优化2
    mysql优化1
  • 原文地址:https://www.cnblogs.com/fxmbz/p/4060296.html
Copyright © 2020-2023  润新知