不是每次真心付出都能换来真心对待。于人于已,无愧于心足矣!

WordPress Transients API 介绍

技术文档 6294浏览 0评论

Transients 是瞬时的意思,WordPress 的 Transients API 就是 WordPress 用来存储一些缓存的数据到数据库中最简单也是最标准的方法,Transients API 给这些缓存的数据一个过期时间,并且时间已到就会自动删除,所以如果你在制作 WordPress 插件的时候,需要存储一些有生命周期的选项的时候,Transients API 就是最好的选择。

WordPress Transients API 函数

Transients API 是 WordPress 2.8 版本开始才有的,它和 WordPress 的 Option API (get_optionadd_optionupdate_optiondelete_option))基本一样,也是使用 WordPress wp_options 数据表来存储这些缓存数据,唯一区别就是 Transients API 有一个过期时间。

Transients API 以下三个函数:set_transient()get_transient(), delete_transient()

// 保存一个临时数据到数据库中
set_transient($transient, $value, $expiration);

// 从数据库中获取一个临时数据
get_transient($transient);

// 从数据库中删除一个临时数据
delete_transient($transient)
WordPress Transients API 要点
  • 使用 Transients API 其实让 WordPress 帮你干一些脏活累活,比如存入数据库之前字符串转移,数组序列化。
  • 如果你使用函数 get_transient 去获取一个临时变量,它已经过期或者不存在,返回 false。
  • Transients API 不会堆满你的数据库,如果一个临时变量过期,在下次获取的时候自动会被删除。

WordPress Transients API 例子
假设你要获取博客的流量最高的 10 篇日志,这个要设计复杂的 SQL 查询,而流量最高的 10 篇日志一般来说在一段时间(12小时)之内是不会变化的,所以我们可以把这个数据通过 Transients API 先缓存了。代码如下:

// 获取日志流量最高的 10 篇日志
function wp_top_10_posts() {
    if (false === ( $top_10_posts = get_transient('top_10_posts') ) ){
    // 临时变量过期了或者根本就没有创建

        // 通过 SQL 查询获取流量最高的 10 篇日志,get_most_viewed 是 Postviews 插件的函数。
        $top_10_posts =  get_most_viewed(10);

        // 把临时变量存到数据库中,时间为 12 个小时
        set_transient( 'top_10_posts', $top_10_posts, 60*60*12 );
    }
    return $top_10_posts;
}

其中 get_most_viewed 是插件 Postviews 的函数,它是用来获取流量最高的日志。

如果由于某种原因某篇流行日志删除,或者新的日志发布了,这个时候可能流量最高的日志都可能发生变化,我们需要使用 delete_transient 函数把这个临时变量删除了。代码如下:

add_action('publish_post', 'wp_top_10_posts_delete', 0);
add_action('delete_post', 'wp_top_10_posts_delete', 0);
function wp_top_10_posts_delete() {
    delete_transient( 'top_10_posts');
}

摘自:http://fairyfish.net/2010/06/06/wordpress-transients-api/

转载请注明:自由的风 » WordPress Transients API 介绍

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (3)

  1. 强烈建议博主安装一个 代码高亮插件.要不然 有时候你的那些 单引号 双引号就全部变了.要是直接复制不替换为英文引号的话,代码没法用. ;-)

    ISayMe2011-04-28 12:52 回复
    • 推荐一个吧,呵呵。有没有什么简单好用的?

      自由的风2011-04-28 12:55 回复
  2. 我一直用的是wp_syntax,好像大部分人都在用这个玩意. 博主搜搜? ;-)

    ISayMe2011-04-28 16:36 回复