我们进行 WordPress 主题插件开发的时候,肯定会保存一些自定义的数据,比如主题的设置信息、网站的 Banner 幻灯片等,这时候我们就需要了解下 WordPress 的数据库结构。

wordpress和数据库_WordPress

不得不说 WordPress 的数据库设计的很好,所有的表几乎都有一个名为 meta 的附表,方便储存和扩展表的内容,比如我们需要给文章添加一个浏览量,如果我们只有一个文章表,那么势必会添加一个浏览量的字段,如果还要扩展一个评论量的栏,那么我们就会修改频繁的修改数据库结构,这样对于程序来说,每改一次就需要修改对应的程序,是非常麻烦的,而如果把表拆分为两个,一个储存主要的信息,另外一个储存一些扩展信息,这样既方便扩展也方便数据的调用。

你会发现 WordPress 有很多个 meta 表,wp_post_meta 储存文章的扩展内容,wp_user_meta 储存用户的扩展信息等等,默认的 WordPress 好像是没有 wp_comment_meta 这个表,是 Akismet 插件来添加的,不过正常情况下 wp_comment 表也是够用了。

好了回到正题,我们应该如何保持我们自定义的数据,大致有一下的几种方法:

1、Meta 表

如果你的数据是唯一,且编辑后不会经常修改,那么你可以保存在 WordPress 的选项表里面,WordPress 提供了 Options 系列函数,把数据以 $key => $value 对的形式,保存到 wp_options 表中。这种方法适合保存一些字典类型的数据,比如插件的配置信息等。

add_option 函数接受四个参数,格式为 add_option($name, $value, $description, $autoload)。使用这个函数来添加数据 是很有好处的。参数 $name 必须是独一无二的,否则你就会覆盖别人的option,或者别人会覆盖你的 option。

get_option 函数允许取回已经存储在数据库里的 option。它只接受一个参数,就是option 的名字。函数的格式是:get_option($option_name)。

update_option 函数工作方式和 add_option 是类似的,除此之外,如果 option 已经存在,该函数会更新option 的值。当往数据库中存储数据的时候,也可以使用这个双重功能的函数。

delete_option 函数从数据库中删除 options。函数的格式是: delete_option($option_name)。

如果你的主题为文章设置了一些单独的属性,比如一篇的分享量,那么推荐你将数据保存在 wp_post_meta 中,WordPress 也同样提供了相关的函数去访问、更新、编辑这些数据,同理用户表也可以这样保存数据。

WordPress 的分类表稍微复杂些,以前的版本默认又三个表来保存分类和标签,最近的版本又添加了一个 wp_term_meta 表来保存一些附加的信息,用法基本一致。

2、创建自己的表

如果上面的一些表无法满足你的需求,你可以自己新建表,比如我们想给用户添加一个留言功能,那么我们完全可以参考 wp_comment 的表结构,设计我们用户的 wp_guestbook 留言表,当然想关的函数我们就需要自己编写了。

自己创建表就需要使用 WordPress 数据库类对象 $wpdb ,这是一个全局对象,所以在 WordPress 可以直接使用,但是如果在一个函数中,这个类对象的引用方式如下:

function sample_function(){
global $wpdb;
}

比如查询 WordPress 博客评论的总数

function sample_function()
{
global $wpdb;
$comments = $wpdb->get_row("SELECT COUNT(comment_approved) AS comments_count FROM
$wpdb->comments WHERE comment_approved = '1' GROUP BY comment_approved", ARRAY_A);
echo $comments['comments_count'];
}

$wpdb 类方法

$wpdb->query()
$wpdb->get_var()
$wpdb->get_row()
$wpdb->get_col()
$wpdb->get_results()
$wpdb->insert()
$wpdb->update()
$wpdb->get_col_info()
$wpdb->flush()
$wpdb->show_errors()
$wpdb->hide_errors()
$wpdb->print_error()

类变量

$show_errors:Whether or not Error echoing is turned on. Defaults to TRUE.
$num_queries:The number of queries that have been executed.
$last_query:The most recent query to have been executed.
$queries:You may save all of the queries run on the database and their stop times by setting the SAVEQUERIES constant to TRUE (this constant defaults to FALSE). If SAVEQUERIES is TRUE, your queries will be stored in this variable as an array.
$last_result:The most recent query results.
$col_info:The column information for the most recent query results. See Getting Column Information.
$insert_id:ID generated for an AUTO_INCREMENT column by the most recent INSERT query.
$num_rows:The number of rows returned by the last query.

返回操作的表名

这里主要是如果用户把表前缀修改了,你就无法得知 用户具体的表名,不过通过 $wpdb 方法可以直接返回要操作的表名。

$posts:The table of Posts.
$users:The table of Users.
$comments:The Comments table.
$links:The table of Links.
$options:he Options table.
$postmeta:The Meta Content (a.k.a. Custom Fields) table.
$usermeta:The usermeta table contains additional user information, such as nicknames, descriptions and permissions.
$terms:The terms table contains the 'description' of Categories, Link Categories, Tags.
$term_taxonomy:The term_taxonomy table describes the various taxonomies (classes of terms). Categories, Link Categories, and Tags are taxonomies.
$term_relationships:The term relationships table contains link between the term and the object that uses that term, meaning this file point to each Category used for each Post.