描述
您不需要序列化值。如果需要序列化该值,则将在设置该值之前对其进行序列化。
参数
- $transient
-
(string)(必填) 瞬态名称。预期不会进行SQL转义。长度必须小于等于172个字符。
- $value
-
(mixed)(必填) 瞬态值。如果不是标量,则必须是可序列化的。预期不会进行SQL转义。
- $expiration
-
(int)(可选) 过期时间(秒)。默认值为0(无过期)。
返回
(bool) 如果设置了该值,则为true,否则为false。
更多信息
对于参数$transient
,如果未启用memcached,则名称的长度应为172个字符或更少,因为WordPress将在选项表中用“_transient_”或“_transient_timeout_”作为名称的前缀(取决于它是否过期)。较长的键名将自动失败。见Trac#15058。
如果存在瞬态,此函数将更新瞬态的过期时间。
注意:从不过期的瞬变是自动加载的,而具有过期时间的瞬变不是自动加载的。在添加可能不需要在每个页面上添加的瞬态时,请考虑这一点,因此不需要自动加载,从而影响页面性能。
WordPress提供了一些以秒为单位指定时间的常量。请参见Transients_API#Using_Time_Constants,而不是将整数相乘。
由于wp_options表中的数据库模式(option_name: varchar(191))的原因,键名限制为191个字符。
在4.4之前的WordPress版本中,长度限制在set_transient(现在为172)中为45,在数据库中为64(现在为191)。
源码
更新日志
版本 | 描述 |
---|---|
2.8.0 | 开始引入 |
使用示例
除非使用外部对象缓存,否则当使用
set_transient()
更新具有现有过期的现有瞬态时,不提供过期值将保持现有过期。例如:
$initial = time(); set_transient( 'foo', 'bar', 300 ); sleep( 10 ); $update = time(); set_transient( 'foo', 'barbar' );
在这种情况下,过期将保持为
$initial + 300
(并且不会更改为$update + 300
,或者永不过期),因为第二次set_transient()
调用不包括$expiration
值(仅更新瞬态的值)。但是要小心,因为如果瞬态在第二次调用(没有
$expiration
参数)之前过期,您可能会无意中将其设置为永不过期。这个例子展示了如何使用最新的五篇博客文章设置一个瞬态,一天后到期。
它使用时间常数来设置过期时间。// Set the arguments for the custom query $args = array( 'post_type' => 'post', 'posts_per_page' => 5, 'orderby' => 'date', 'order' => 'DESC' ); $latest_post = new WP_Query( $args ); // Save the results in a transient named latest_5_posts set_transient( 'latest_5_posts', $latest_post, DAY_IN_SECONDS );
要了解有关如何获取文章和自定义文章类型项的更多信息,请阅读WP_Query的文档。
保存$special_query_results对象12小时
set_transient( 'special_query_results', $special_query_results, 12 * HOUR_IN_SECONDS );
WordPress以UNIX时间戳的形式保存瞬态过期时间。当你寻找
_transient_timeout_{$transient}
选项名称在WordPress的选项表中,看起来像1636453079,它是UNIX时间戳,而不是秒。
查看GitHub上的代码