函数文档

set_site_transient()

💡 云策文档标注

概述

set_site_transient() 函数用于设置或更新站点瞬态(site transient)的值,支持设置过期时间。该函数会自动处理值的序列化,并包含多个钩子(Hook)用于自定义行为。

关键要点

  • 函数用于设置站点瞬态,适用于多站点环境中的缓存数据存储。
  • 参数包括瞬态名称($transient,字符串,长度不超过167字符)、值($value,混合类型)和过期时间($expiration,整数,默认0表示永不过期)。
  • 返回值是布尔值:成功设置返回 true,否则返回 false。
  • 函数内部使用 apply_filters 钩子(如 pre_set_site_transient_{$transient} 和 expiration_of_site_transient_{$transient})允许在设置前过滤值和过期时间。
  • 根据是否使用外部对象缓存或安装模式,函数通过 wp_cache_set() 或 add_site_option()/update_site_option() 实现存储。
  • 设置成功后,会触发 do_action 钩子(如 set_site_transient_{$transient} 和 set_site_transient),并包含一个已弃用的钩子 setted_site_transient。

代码示例

// 设置一个站点瞬态,过期时间为1小时(3600秒)
$result = set_site_transient( 'my_transient_key', 'some_value', 3600 );
if ( $result ) {
    echo '瞬态设置成功';
} else {
    echo '瞬态设置失败';
}

注意事项

  • 瞬态名称不应进行 SQL 转义,且长度限制为167字符以内。
  • 值会自动序列化,无需手动处理。
  • 过期时间以秒为单位,设置为0表示永不过期。
  • 函数在 WordPress 2.9.0 版本引入,适用于多站点环境。
  • 注意钩子的动态部分(如 {$transient})允许针对特定瞬态进行过滤和操作。

📄 原文内容

Sets/updates the value of a site transient.

Description

You do not need to serialize values. If the value needs to be serialized, then it will be serialized before it is set.

See also

Parameters

$transientstringrequired
Transient name. Expected to not be SQL-escaped. Must be 167 characters or fewer in length.
$valuemixedrequired
Transient value. Expected to not be SQL-escaped.
$expirationintoptional
Time until expiration in seconds. Default 0 (no expiration).

Return

bool True if the value was set, false otherwise.

Source

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

	/**
	 * Filters the value of a specific site transient before it is set.
	 *
	 * The dynamic portion of the hook name, `$transient`, refers to the transient name.
	 *
	 * @since 3.0.0
	 * @since 4.4.0 The `$transient` parameter was added.
	 *
	 * @param mixed  $value     New value of site transient.
	 * @param string $transient Transient name.
	 */
	$value = apply_filters( "pre_set_site_transient_{$transient}", $value, $transient );

	$expiration = (int) $expiration;

	/**
	 * Filters the expiration for a site transient before its value is set.
	 *
	 * The dynamic portion of the hook name, `$transient`, refers to the transient name.
	 *
	 * @since 4.4.0
	 *
	 * @param int    $expiration Time until expiration in seconds. Use 0 for no expiration.
	 * @param mixed  $value      New value of site transient.
	 * @param string $transient  Transient name.
	 */
	$expiration = apply_filters( "expiration_of_site_transient_{$transient}", $expiration, $value, $transient );

	if ( wp_using_ext_object_cache() || wp_installing() ) {
		$result = wp_cache_set( $transient, $value, 'site-transient', $expiration );
	} else {
		$transient_timeout = '_site_transient_timeout_' . $transient;
		$option            = '_site_transient_' . $transient;
		wp_prime_site_option_caches( array( $option, $transient_timeout ) );

		if ( false === get_site_option( $option ) ) {
			if ( $expiration ) {
				add_site_option( $transient_timeout, time() + $expiration );
			}
			$result = add_site_option( $option, $value );
		} else {
			if ( $expiration ) {
				update_site_option( $transient_timeout, time() + $expiration );
			}
			$result = update_site_option( $option, $value );
		}
	}

	if ( $result ) {

		/**
		 * Fires after the value for a specific site transient has been set.
		 *
		 * The dynamic portion of the hook name, `$transient`, refers to the transient name.
		 *
		 * @since 3.0.0
		 * @since 4.4.0 The `$transient` parameter was added
		 *
		 * @param mixed  $value      Site transient value.
		 * @param int    $expiration Time until expiration in seconds.
		 * @param string $transient  Transient name.
		 */
		do_action( "set_site_transient_{$transient}", $value, $expiration, $transient );

		/**
		 * Fires after the value for a site transient has been set.
		 *
		 * @since 6.8.0
		 *
		 * @param string $transient  The name of the site transient.
		 * @param mixed  $value      Site transient value.
		 * @param int    $expiration Time until expiration in seconds.
		 */
		do_action( 'set_site_transient', $transient, $value, $expiration );

		/**
		 * Fires after the value for a site transient has been set.
		 *
		 * @since 3.0.0
		 * @deprecated 6.8.0 Use 'set_site_transient' instead.
		 *
		 * @param string $transient  The name of the site transient.
		 * @param mixed  $value      Site transient value.
		 * @param int    $expiration Time until expiration in seconds.
		 */
		do_action_deprecated( 'setted_site_transient', array( $transient, $value, $expiration ), '6.8.0', 'set_site_transient' );
	}

	return $result;
}

Hooks

apply_filters( “expiration_of_site_transient_{$transient}”, int $expiration, mixed $value, string $transient )

Filters the expiration for a site transient before its value is set.

apply_filters( “pre_set_site_transient_{$transient}”, mixed $value, string $transient )

Filters the value of a specific site transient before it is set.

do_action_deprecated( ‘setted_site_transient’, string $transient, mixed $value, int $expiration )

Fires after the value for a site transient has been set.

do_action( ‘set_site_transient’, string $transient, mixed $value, int $expiration )

Fires after the value for a site transient has been set.

do_action( “set_site_transient_{$transient}”, mixed $value, int $expiration, string $transient )

Fires after the value for a specific site transient has been set.

Changelog

Version Description
2.9.0 Introduced.