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

<?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. C语言---volatile(我的工程笔记本)

    一般说来,volatile用在如下的几个地方: 1.中断服务程序中修改的供其它程序检测的变量需要加volatile: 2.多任务环境下各任务间共享的标志应该加volatile: 3.存储器映射的硬件寄 ...

  2. Scala学习笔记--Akka

    待完成 http://www.gtan.com/akka_doc/ http://my.oschina.net/mingdong/blog/297972 http://www.jdon.com/con ...

  3. 更新项目经常使用的Linux命令

    在公司经常在服务器上更新项目,总结了自己经常使用的命令: 1.删除:rm -rf 文件名2.复制:copy 文件 目标地址3.压缩:zip -r 压缩后文件名 被压缩目录4.移动:move 文件 目标 ...

  4. GO函数倒叙输出

    package main import "fmt" func main(){ rec() } func rec(i int){ { return } rec(i+) fmt.Pri ...

  5. Ubuntu常用命令与技巧

    sudo apt-get install 软件名 安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” ls 列出当前目录文件(不包括隐含文件) l ...

  6. 怎样制作百度recovery【转】

    由于recovery的硬件相关性比较强,使得recovery的通用性不强,项目组为了降低整个开发的难度,coron项目里面默认是编译生成百度recovery的. 不过还是有很多开发者问私下我,怎样制作 ...

  7. gitosis使用笔记

    gitosis是Git下的权限管理工具,通过一个特殊的仓库(gitosis-admin.git)对Git权限进行管理. 1:服务端安装并配置gitosis (1)通过以下方式获取到安装包 root@w ...

  8. MySQL 学习笔记 (limit offset)

    select * from table limit (10000,10);这样是很慢的,因为要定位 比较快的写法是 select * from table where id >=(select ...

  9. Codeforces 573B Bear and Blocks

    http://codeforces.com/problemset/problem/573/B  题目大意: 给出n个连续塔,每个塔有高度hi,每次取走最外层的块,问需要多少次操作能够拿光所有的块. 思 ...

  10. PowerShell 中使用json对象的性能比较

    PowerShell v3 – Creating Objects With [pscustomobject] – it’s fast! September 19, 2011powershell, v3 ...