WordPress函数:set_transient 设置临时值

江河/ 2023年09月25日/ WordPress/ 浏览 1056

函数原型:


set_transient( string $transient, mixed $value, int $expiration ): bool


设置临时值。


您不需要序列化值。如果需要序列化该值,则会在设置该值之前对其进行序列化。


参数说明:


$transient,临时名称。应为非SQL转义。长度必须小于等于172个字符。


$value,临时值。如果不是标量,则必须是可序列化的,应为非SQL转义。


$expiration,过期时间。


对于参数$transient,如果未启用memcached,则名称的长度应小于或等于172个字符,因为WordPress将在选项表中为您的名称加上“_transient_”或“_translient_timeout_”前缀(取决于它是否过期)。较长的密钥名称将无声地失败。参见Trac#15058。


如果存在瞬态,此函数将更新瞬态的到期时间。


注意:永远不会过期的瞬态是自动加载的,而有过期时间的瞬态不会自动加载。当添加可能不需要在每个页面上都使用的瞬态,因此不需要自动加载,从而影响页面性能时,请考虑这一点。


WordPress提供了一些以秒为单位指定时间的常量。请参见Transients_API#Using_Time_Constants,而不是将整数相乘。


由于wp_options表中的数据库架构(option_name:varchar(191)),临时密钥名称限制为191个字符。


在4.4之前的WordPress版本中,set_transient中的长度限制为45(现在为172),数据库中的长度为64(现在为191)。


函数源码:


function set_transient( $transient, $value, $expiration = 0 ) {

	$expiration = (int) $expiration;

	$value = apply_filters( "pre_set_transient_{$transient}", $value, $expiration, $transient );

	$expiration = apply_filters( "expiration_of_transient_{$transient}", $expiration, $value, $transient );

	if ( wp_using_ext_object_cache() || wp_installing() ) {
		$result = wp_cache_set( $transient, $value, 'transient', $expiration );
	} else {
		$transient_timeout = '_transient_timeout_' . $transient;
		$transient_option  = '_transient_' . $transient;

		if ( false === get_option( $transient_option ) ) {
			$autoload = 'yes';
			if ( $expiration ) {
				$autoload = 'no';
				add_option( $transient_timeout, time() + $expiration, '', 'no' );
			}
			$result = add_option( $transient_option, $value, '', $autoload );
		} else {
			$update = true;

			if ( $expiration ) {
				if ( false === get_option( $transient_timeout ) ) {
					delete_option( $transient_option );
					add_option( $transient_timeout, time() + $expiration, '', 'no' );
					$result = add_option( $transient_option, $value, '', 'no' );
					$update = false;
				} else {
					update_option( $transient_timeout, time() + $expiration );
				}
			}

			if ( $update ) {
				$result = update_option( $transient_option, $value );
			}
		}
	}

	if ( $result ) {
		do_action( "set_transient_{$transient}", $value, $expiration, $transient );

		do_action( 'setted_transient', $transient, $value, $expiration );
	}

	return $result;
}


包含钩子:


apply_filters( "expiration_of_transient_{$transient}", int $expiration, mixed $value, string $transient )

apply_filters( "pre_set_transient_{$transient}", mixed $value, int $expiration, string $transient )

do_action( 'setted_transient', string $transient, mixed $value, int $expiration )

do_action( "set_transient_{$transient}", mixed $value, int $expiration, string $transient )


使用举例:


$initial = time();
set_transient( 'foo', 'bar', 300 );
sleep( 10 );
$update = time();
set_transient( 'foo', 'barbar' );


发表评论

暂无评论,抢个沙发...

客服 工单