WordPress 的插件和数据库交互
当你编写一个插件的时候,你将不可避免地要将一些变量存储到数据库,或者将它们从数据库中取出。幸运的是,WordPress通过options 和一个数据库对象,使得存取数据变得很简单。本文将会谈及如何在一个WordPress 数据库中存储或者取回数据。
在数据库中存储数据
将数据存储到WordPress 数据库,主要有两种方法:
- 创建你自己的表。
- 使用Options
由于绝大多数插件不需要它们自己的表,所以,我将只讨论使用options 的方法。然而,WordPress Codex 上面详细讨论了怎样设定你自己的表的方法。
WordPress Options
使用WordPress Options,在数据库存储和取回数据就跟函数调用一样简单。WordPress 为options 提供了四个函数:
- add_option
- get_option
- update_option
- delete_option
add_option
add_option函数接受四个参数,option 的名字是必须的。四个参数是:
add_option($name,$value,$description,$autoload);
使用这个函数来添加将来要从数据库中取出的数据是很有好处的。
参数 $name必须是独一无二的,否则你就会覆盖别人的option,或者别人会覆盖你的option。
我通常不用这个函数,因为 update_function完全可以做相同的事情。
get_option
get_option函数允许你取回事先存储在数据库里的option。它只接受一个参数,就是option 的名字。函数的格式是:
get_option($option_name);
update_option
update_option函数工作方式和 add_option是一样的,除此之外,如果option 已经存在,该函数会更新option 的值。当往数据库中存储数据的时候,我个人喜欢使用这个双重功能的函数,尤甚于 add_option。
delete_option
delete_option函数从数据库中删除options。函数的格式是: delete_option($option_name);
代码范例
你可能会回忆起这个系列以前的文章中,我把options 以array 的形式存入数据库。这里是一个例子,并且还有一些说明分析:
//Returns an array of admin options function getAdminOptions() { $devloungeAdminOptions = array('show_header' => 'true', 'add_content' => 'true', 'comment_author' => 'true', 'content' => ''); $devOptions = get_option($this->adminOptionsName); if (!empty($devOptions)) { foreach ($devOptions as $key => $option) $devloungeAdminOptions[$key] = $option; } update_option($this->adminOptionsName, $devloungeAdminOptions); return $devloungeAdminOptions; }
在第3-6 行,我创建了一个最终要作为option 存入WordPress 数据库( 12 行)的数组。我这么做是因为我不需要存
储多个选项(每个选项都要查询一次数据库)。这个技术对代码臃肿,数据库查询和名字冲突都有所助益。
WordPress数据库类
另一个在WordPress 数据库存储和取回数据的强大的方法是使用WordPress 数据库类对象。在一个函数中,这个类对象的引用方式如下:
function sample_function() { global $wpdb; }
在这个变量被引用了以后,你可以访问《wpdb 类中许多有用的函数》。
举例来说,假如我们想要取回WordPress 博客的评论的总数。这是一个函数,通过使用WPDB 类来实现这个目的:
function sample_function() { global $wpdb; $comments = $wpdb->get_row("SELECT count(comment_approved) comments_count FROM $wpdb->comments where comment_approved = '1' group by comment_approved", ARRAY_A); echo $comments['comments_count']; }
上述函数完成了如下工作:
- 第2 行,我们添加了一个$wpdb 的引用。
- 第3 行,我们调用了一个wpdb类内部的函数 get_row
- 第3 行,我们从评论表( $wpdb->comments )中取回数据。这里我们指定返回的数据为一个联合数组
(ARRAY_A)。 - 第4 行,我们打印出结果。因为我希望数据的放回形式是联合数组,我只要调用我在SQL 语句中赋值的变量就可以
了,也就是 comments_count
wpdb 类是一个有着许多功能的非常大的类。我建议查看一下 WPDB类页面 ,看看wpdb类到底可以干些什么。