为此目的Transient API 是正确的选择。
From Codex page:
Transient API提供了一种在数据库中临时存储cacheddata的简单而标准化的方法,方法是为cacheddata指定一个自定义名称和一个atimeframe,在该名称和atimeframe过期后将其删除。
。。。
同样值得注意的是,瞬变过程本质上是由杂音加速的,而正常的选项则不是。例如,一个memcached插件可以让WordPress将瞬时值存储在快速内存中,而不是数据库中。因此,应使用瞬态存储任何预期将过期或随时可能过期的数据。也不应假设瞬态存在于数据库中,因为它们可能根本不存储在数据库中。
示例代码如何设置瞬态
set_transient( $transient, $value, $expiration );
$transient
(字符串)临时名称。应为非SQL转义。长度必须小于等于172个字符。
$value
(数组|对象)要保存的数据,可以是正则变量,也可以是数组/对象。API将为您处理复杂数据的序列化。
$expiration
(整数)刷新前保留数据的最长秒数。瞬态可能在$过期之前过期(由于外部对象缓存或数据库升级),但在$过期之后将永远不会返回其值。
因此,例如,要将$special\\u query\\u results对象保存12小时,您可以执行以下操作:
set_transient( \'special_query_results\', $special_query_results, 60*60*12 );
如何获得瞬态
get_transient( $transient );
$瞬态使用set\\u transient()保存瞬态时使用的唯一slug。
在本例中,我们可以使用以下工具获取特殊查询结果:
get_transient( \'special_query_results\' );
如果瞬态不存在或已过期,则
get_transient()
将返回
false
. 应该使用标识运算符(===)而不是普通的相等运算符(==),因为要存储的数据可能是整数值零(或其他“空”/“假”数据)。正因为如此;“错误”;值,不应使用瞬态来保存纯布尔值(真/假)。将它们放入数组或将其转换为整数。
示例用法:
if ( false === ( $value = get_transient( \'value\' ) ) ) {
// this code runs when there is no valid transient set
}
上述代码将获取瞬态并将其放入
$value
. if块中的代码仅在没有有效的瞬态时运行。这通常是通过其他方式重新生成瞬态值的方法。请记住,瞬态可能在正常到期时间之前不可用。
完整示例
function wp1707_get_my_api_data ( $update = false ){
// Checking if our transient is available.
$my_api_data = get_transient( \'wp1707_my_api_data\' );
// Is transient data not available or do we want to force the update?
if ( empty( $my_api_data ) || !$update) {
// Get the data from API
$my_api_data = call_to_my_api();
// Now let\'s set that data as transient and store it for 3hours
set_transient( \'wp1707_my_api_data\', $my_api_data, 3 * HOUR_IN_SECONDS );
}
//
return $my_api_data;
}
使用瞬态时的注意事项API瞬态有时间限制,但可能会过期
before 您设置的过期时间。
Always make sure to have fallback in your code.当使用缓存插件/机制时,瞬态存储在数据库之外。
Never assume or expect transients to be stored inside database.确保您使用的slug是唯一的。广义段塞,如
my_api_data
是糟糕的设计决策。最好用唯一的前缀/后缀填充段塞,例如
wp1707_wcf_my_api_data
. 这是为了确保任何其他设计糟糕的插件/主题不会覆盖您的瞬态数据瞬态API并不适用于所有情况。阅读Pressjitsu的这篇文章-
Don\'t Cache Everything with TransientsThis article by CSS-Tricks 对示例代码的利弊有一些很好的指示