WordPress 的插件和数据库交互

优质
小牛编辑
128浏览
2023-12-01

当你编写一个插件的时候,你将不可避免地要将一些变量存储到数据库,或者将它们从数据库中取出。幸运的是,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类到底可以干些什么。