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

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

WordPress插件制作教程(五): 创建新的数据表的更多相关文章

  1. WordPress插件制作教程概述

    接下来的一段时间里,开始为大家讲解WordPress插件制作系列教程,这篇主要是对WordPress插件的一些介绍和说明,还有一些我们需要注意的地方,以及需要掌握的知识. WordPress插件允许你 ...

  2. WordPress插件制作教程(一): 如何创建一个插件

    上一篇还是按照之前的教程流程,写了一篇WordPress插件制作教程概述,从这一篇开始就为大家具体讲解WordPress插件制作的内容.这一篇主要说一下插件的创建方法. 相信大家都知道插件的安装文件在 ...

  3. WordPress插件制作教程(四): 将数据保存到数据库

    上一篇讲解了添加菜单的方法,这一篇为大家讲解如何将数据保存到数据库中,并且显示在页面上,不会因提交表单时刷新页面输入框中内容消失.要实现这一功能我们需要借助WordPress函数来实现,下面就来讲解具 ...

  4. WordPress插件制作教程(八): 最后总结

    WordPress插件教程最后一篇,还是为大家简单的做下总结.这次插件制作教程讲的内容和知识点个人觉得不是很多,因为插件制作不单单是这些内容,它涉及的知识很多很多,不是说你会一些函数就可以做出一个好的 ...

  5. WordPress插件制作教程(六): 插件函数之动作(Actions)函数

    这一篇为大家说一下WordPress插件函数吧,要制作插件,了解这些函数是非常有必要的 WordPress插件函数分为“动作”(Actions)和过滤器”(Filters),WordPress 使用这 ...

  6. WordPress插件制作教程(二): 编写一个简单的插件

    上一篇说到了如何创建一个插件,我想大家看了之后一定会有所收获,这一篇简单给大家写一个插件样例,让大家有一个基本的印象.这个插件的样例就是当你激活这个插件后会在你的每篇文章中插入一段自己定义好的内容,比 ...

  7. WordPress插件制作教程(七): 插件函数之过滤器(Filter)函数

    上一篇对插件函数之动作(Action)函数做了下介绍,这篇在介绍下过滤器(Filters). 过滤器是一类函数,WordPress执行传递和处理数据的过程中,在针对这些数据做出某些动作之前的特定运行( ...

  8. WordPress插件制作教程(三): 添加菜单的方法

    上一篇编写了一个简单的插件,让大家对插件的简单制作有个了解,这一篇我们在更深一步,当我们激活插件后后台会显示菜单出来,然后通过单击菜单显示自己定义好的信息.激活之后会在WordPress后台显示一个菜 ...

  9. WordPress主题制作教程5:循环

    wordpress循环分两种,一种是自定义循环,一种是默认循环. 自定义循环:根据指定参数进行实例化 调用所有页面,post_type值:page对应页面,post对应文章 <?php $arg ...

随机推荐

  1. AES CBC 128的实现

    原由 AES已经变成目前对称加密中最流行算法之一,AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 项目中需要使用AES对密码信息进行加密,由嵌入式设备使用C语言进行加 ...

  2. UIApplication详解再解-备

    每个app有且只有一个UIApplication对象,当程序启动的时候通过调用UIApplicationMain方法得到的.可以通过sharedApplication方法得到. UIApplicati ...

  3. hdu Big Number

    #include <cstdio> #include <cstring> #include <cmath> using namespace std; int mai ...

  4. java基础进阶:SQL的运用

    SQL的基础的运用 /* --1.学生表 Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Cour ...

  5. 第32讲 UI组件之 时间日期控件DatePicker和TimePicker

    第32讲 UI组件之 时间日期控件DatePicker和TimePicker 在Android中,时间日期控件相对来说还是比较丰富的.其中, DatePicker用来实现日期输入设置,    Time ...

  6. 第21/22讲 UI_布局 之 线性布局

    第21/22讲 UI_布局 之 线性布局 布局管理就是组件在activity中呈现方式,包括组件的大小,间距和对齐方式等. Android提供了两种布局的实现方式: 1.在xml配置文件中声明:这种方 ...

  7. poj 2049 Let it Bead(polya模板)

      Description Cannery Row percent of the target audience insists that the bracelets be unique. (Just ...

  8. Vue + element-ui

    在Vue-cli生成的项目中使用 element-ui,按照官方的指导 npm i element-ui -D 执行之后,查看package.json,element-ui 加在了 "dev ...

  9. Android状态栏颜色修改

    android状态栏颜色修改   状态栏颜色的修改在4.4和5.x环境下分别有不同的方式,低于4.4以下是不能修改的.   5.x环境下 方式一,状态栏将显示为纯净的颜色,没有渐变效果 /** * 状 ...

  10. setTimeout()和setInterval()小结

    写在前面:在写H5游戏时经常需要使用定时刷新页面实现动画效果,比较常用即setTimeout()以及setInterval() setTimeout 描述 setTimeout(code,millis ...