WP_Feed_Cache_Transient
云策文档标注
概述
WP_Feed_Cache_Transient 是 WordPress 核心类,用于实现基于瞬态(transient)的 feed 缓存机制,遵循 SimplePieCacheBase 接口。它主要用于管理 RSS 或 Atom feed 数据的缓存操作,包括保存、加载、更新和删除。
关键要点
- 类实现 SimplePieCacheBase 接口,提供 feed 缓存功能。
- 使用瞬态存储数据,支持通过 set_site_transient 和 get_site_transient 函数操作。
- 包含主要方法:__construct(构造函数)、save(保存数据)、load(加载数据)、mtime(获取修改时间)、touch(更新修改时间)、unlink(删除缓存)。
- 属性包括 $name(缓存名称)、$mod_name(修改时间名称)、$lifetime(缓存生命周期,默认 12 小时)。
- 支持通过 wp_feed_cache_transient_lifetime 过滤器自定义缓存生命周期。
- 从 WordPress 6.9.0 版本起,切换到使用多站点全局缓存函数(*_site_transient)。
代码示例
public function __construct( $location, $name, $type ) {
$this->name = 'feed_' . $name;
$this->mod_name = 'feed_mod_' . $name;
$lifetime = $this->lifetime;
$this->lifetime = apply_filters( 'wp_feed_cache_transient_lifetime', $lifetime, $name );
}public function save( $data ) {
if ( $data instanceof SimplePieSimplePie ) {
$data = $data->data;
}
set_site_transient( $this->name, $data, $this->lifetime );
set_site_transient( $this->mod_name, time(), $this->lifetime );
return true;
}注意事项
- 该类主要用于 feed 缓存,与 SimplePie 库集成,处理 RSS/Atom 数据。
- 在 WordPress 6.9.0 版本后,使用 *_site_transient 函数确保多站点环境下的缓存一致性。
- 缓存生命周期可通过过滤器调整,开发者应合理设置以避免数据过期或资源浪费。
原文内容
Core class used to implement feed cache transients.
Methods
| Name | Description |
|---|---|
| WP_Feed_Cache_Transient::__construct | Creates a new (transient) cache object. |
| WP_Feed_Cache_Transient::load | Retrieves the data saved in the transient. |
| WP_Feed_Cache_Transient::mtime | Gets mod transient. |
| WP_Feed_Cache_Transient::save | Saves data to the transient. |
| WP_Feed_Cache_Transient::touch | Sets mod transient. |
| WP_Feed_Cache_Transient::unlink | Deletes transients. |
Source
class WP_Feed_Cache_Transient implements SimplePieCacheBase {
/**
* Holds the transient name.
*
* @since 2.8.0
* @var string
*/
public $name;
/**
* Holds the transient mod name.
*
* @since 2.8.0
* @var string
*/
public $mod_name;
/**
* Holds the cache duration in seconds.
*
* Defaults to 43200 seconds (12 hours).
*
* @since 2.8.0
* @var int
*/
public $lifetime = 43200;
/**
* Creates a new (transient) cache object.
*
* @since 2.8.0
* @since 3.2.0 Updated to use a PHP5 constructor.
* @since 6.7.0 Parameter names have been updated to be in line with the `SimplePieCacheBase` interface.
*
* @param string $location URL location (scheme is used to determine handler).
* @param string $name Unique identifier for cache object.
* @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either `TYPE_FEED` ('spc') for SimplePie data,
* or `TYPE_IMAGE` ('spi') for image data.
*/
public function __construct( $location, $name, $type ) {
$this->name = 'feed_' . $name;
$this->mod_name = 'feed_mod_' . $name;
$lifetime = $this->lifetime;
/**
* Filters the transient lifetime of the feed cache.
*
* @since 2.8.0
*
* @param int $lifetime Cache duration in seconds. Default is 43200 seconds (12 hours).
* @param string $name Unique identifier for the cache object.
*/
$this->lifetime = apply_filters( 'wp_feed_cache_transient_lifetime', $lifetime, $name );
}
/**
* Saves data to the transient.
*
* @since 2.8.0
*
* @param array|SimplePieSimplePie $data Data to save. If passed a SimplePie object,
* only cache the `$data` property.
* @return true Always true.
*/
public function save( $data ) {
if ( $data instanceof SimplePieSimplePie ) {
$data = $data->data;
}
set_site_transient( $this->name, $data, $this->lifetime );
set_site_transient( $this->mod_name, time(), $this->lifetime );
return true;
}
/**
* Retrieves the data saved in the transient.
*
* @since 2.8.0
*
* @return array Data for `SimplePie::$data`.
*/
public function load() {
return get_site_transient( $this->name );
}
/**
* Gets mod transient.
*
* @since 2.8.0
*
* @return int Timestamp.
*/
public function mtime() {
return get_site_transient( $this->mod_name );
}
/**
* Sets mod transient.
*
* @since 2.8.0
*
* @return bool False if value was not set and true if value was set.
*/
public function touch() {
return set_site_transient( $this->mod_name, time(), $this->lifetime );
}
/**
* Deletes transients.
*
* @since 2.8.0
*
* @return true Always true.
*/
public function unlink() {
delete_site_transient( $this->name );
delete_site_transient( $this->mod_name );
return true;
}
}