当你写插件的时候,你可能需要写东西到数据库中去,一般来说,有两种数据要存储,第一种是安装数据,一般存储在 options 表中,使用 WordPress 的 options 机制来实现,
为WordPress 插件添加数据表
。第二种是数据,可以存储到 postmeta. 表或者 usermeta. 表中。如果数据特别多,就需要自己创建数据库了。这篇文章就讲讲如何在写插件时候创建数据库。一般在写插件时候创建数据库有如下三个步骤:创建一个添加新数据表的 PHP 函数。
保证插件启动的时候调用这个插件。
如果新版本有不同的数据表结构,创建一个升级函数。
今天我就结合我以前写的 《WordPress 插件:Google PageRank》 讲解下这个过程,其中的第三步,由于没有数据库的升级,不涉及,如果你要了解这个东东,请参考 Codex 文档:Creating Tables with Plugins,这篇也是很多参考这里的。
创建一个添加新数据表的 PHP 函数
我们这个插件的安装函数叫做:google_pagerank_install。
1. 数据库表前缀
默认 WordPress 数据库标签前缀都是wp_,但是有人如果在一个数据库安装两个及以上 WordPress,就需要在wp-config.php设置 WordPress 数据库表前缀来区别,所以我们向 WordPress 数据库添加新表的时候,要先找找到数据库表前缀。我们可以在变量$wpdb->prefix找到。代码如下:
<span>function</span><span></span><span>google_pagerank_install</span><span></span><span>()</span><span></span><span>{</span><span></span><span>global</span><span></span><span>$wpdb</span><span>;</span><span>$table_name</span><span>=</span><span>$wpdb</span><span>-></span><span>prefix</span><span>.</span><span>"</span><span>googlepr</span><span>"</span><span>;</span>2. 判断表是否存在
可以通过一条SHOW TABLESSQL 查询来判断。
<span></span><span>if</span><span>(</span><span>$wpdb</span><span>-></span><span>get_var</span><span>(</span><span>"</span><span>SHOW TABLES LIKE "</span><span>$table_name</span><span>"</span><span>"</span><span>)</span><span>!=</span><span>$table_name</span><span>)</span><span></span><span>{</span>3. 创建数据表
这步就是实际来创建一个数据表了。我们这个表有三个字段,post_id日志的 ID,外键。pr该日志 ID 对应页面的 PR,time更新时间。由于 PR 更新不是每天都发生的。所以我们可以设置上次查询 PR 的时间,然后在一段时间间隔内都不去查询,直接在数据库中调用。
这里我不用直接的 SQL 查询来创建,而是使用在wp-admin/upgrade-functions.php(我们需要导入该文件,默认是不会导入的)中的dbDelta。dbDelta函数会检查当前的表结构,和需要的表结构进行比较,所以无论添加或者修改表都会非常方便。关于具体怎样使用dbDelta,详细可以看wp-admin/upgrade-schema.php中的例子。
<span></span><span>$sql</span><span>=</span><span>"</span><span>CREATE TABLE</span><span>"</span><span>.</span><span>$table_name</span><span>.</span><span>"</span><span>( post_id bigint(20) NOT NULL, pr int(2) NOT NULL default "0", time datetime NOT NULL default "0000-00-00 00:00:00", UNIQUE KEY post_id (post_id) );</span><span>"</span><span>;</span><span>require_once</span><span>(</span><span>ABSPATH</span><span>.</span><span>"</span><span>wp-admin/includes/upgrade.php</span><span>"</span><span>)</span><span>;</span><span>dbDelta</span><span>(</span><span>$sql</span><span>)</span><span>;</span>
最后这个google_pagerank_install函数为:
<span>function</span><span></span><span>google_pagerank_install</span><span></span><span>()</span><span></span><span>{</span><span></span><span>global</span><span></span><span>$wpdb</span><span>;</span><span>$table_name</span><span>=</span><span>$wpdb</span><span>-></span><span>prefix</span><span>.</span><span>"</span><span>googlepr</span><span>"</span><span>;</span><span>if</span><span>(</span><span>$wpdb</span><span>-></span><span>get_var</span><span>(</span><span>"</span><span>show tables like "</span><span>$table_name</span><span>"</span><span>"</span><span>)</span><span>!=</span><span>$table_name</span><span>)</span><span></span><span>{</span><span></span><span>$sql</span><span>=</span><span>"</span><span>CREATE TABLE</span><span>"</span><span>.</span><span>$table_name</span><span>.</span><span>"</span><span>( post_id bigint(20) NOT NULL, pr int(2) NOT NULL default "0", time datetime NOT NULL default "0000-00-00 00:00:00", UNIQUE KEY post_id (post_id) );</span><span>"</span><span>;</span><span>require_once</span><span>(</span><span>ABSPATH</span><span>.</span><span>"</span><span>wp-admin/includes/upgrade.php</span><span>"</span><span>)</span><span>;</span><span>dbDelta</span><span>(</span><span>$sql</span><span>)</span><span>;</span><span>}</span><span></span><span>}</span>保证插件启动的时候调用这个插件
我们使用register_activation_hook调用上面创建数据表的函数,
管理资料
《为WordPress 插件添加数据表》(https://www.unjs.com)。register_activation_hook(__FILE__,‘google_pagerank_install‘);
参考:Creating Tables with Plugins
最后欢迎大家使用我的 Google PageRank for WordPress,它能够获取每篇日志的 PR 值。并在文章结尾显示。
作者:雪山飞猪
原文链接:为插件添加数据表