当你写wordpress功能的时候,你可能需要写东西到数据库中去,一般来说,大多数数据可以存储在 wp_options 表中,使用 WordPress 的 options 机制来实现。也可以存储到 postmeta 表或者 usermeta 表中。如果数据特别多,就需要单独创建数据表了。这篇文章就讲讲如何创建数据表。
1. 数据库表前缀
默认 WordPress 数据库标签前缀都是 wp_,但是有人如果在一个数据库安装两个及以上 WordPress,就需要在 wp-config.php 设置 WordPress 数据库表前缀来区别,所以我们向 WordPress 数据库添加新表的时候,要先找找到数据库表前缀。我们可以在变量 $wpdb->prefix找到。代码如下:
global $wpdb; $table_name = $wpdb->prefix . "weixin_robot_texts";
2. 判断表是否存在
可以通过一条 SHOW TABLES SQL 查询来判断。
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
3. 创建数据表
这步就是实际来创建一个数据表了。我们这个表有5个字段,id 自定义文本回复的 ID。keyword微信发送过来的关键字,reply 自定义回复,time 添加的时间,status是否启用,有时候只是不想暂时不想启用,而不是删除。
这里我不用直接的 SQL 查询来创建,而是使用在 wp-admin/upgrade-functions.php(我们需要加载该文件,默认是不会加载的)中的 dbDelta。dbDelta 函数会检查当前的表结构,和需要的表结构进行比较,所以无论添加或者修改表都会非常方便。关于具体怎样使用 dbDelta,详细可以看 wp-admin/upgrade-schema.php 中的例子。
$sql = "CREATE TABLE " . $tablename . " ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `keyword` varchar(255) CHARACTER SET utf8 NOT NULL, `reply` text CHARACTER SET utf8 NOT NULL, `status` int(1) NOT NULL DEFAULT '1', `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `keyword` (`keyword`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "; require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
最后代码为:
function my_crate_table() { global $wpdb; $table_name = $wpdb->prefix . "weixin_robot_texts"; if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name){ $sql = "CREATE TABLE " . $table_name . " ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `keyword` varchar(255) CHARACTER SET utf8 NOT NULL, `reply` text CHARACTER SET utf8 NOT NULL, `status` int(1) NOT NULL DEFAULT '1', `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `keyword` (`keyword`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; "; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } }
$a = $wpdb->get_results("SELECT * FROM tablename"); foreach ($a as $b) { echo $b->post_title."<br />"; }
未经允许不得转载:前端撸码笔记 » WordPress 教程:自己创建数据表