WordPress Version: 6.3
/**
* Sets/updates the value of a transient.
*
* You do not need to serialize values. If the value needs to be serialized,
* then it will be serialized before it is set.
*
* @since 2.8.0
*
* @param string $transient Transient name. Expected to not be SQL-escaped.
* Must be 172 characters or fewer in length.
* @param mixed $value Transient value. Must be serializable if non-scalar.
* Expected to not be SQL-escaped.
* @param int $expiration Optional. Time until expiration in seconds. Default 0 (no expiration).
* @return bool True if the value was set, false otherwise.
*/
function set_transient($transient, $value, $expiration = 0)
{
$expiration = (int) $expiration;
/**
* Filters a specific transient before its value is set.
*
* The dynamic portion of the hook name, `$transient`, refers to the transient name.
*
* @since 3.0.0
* @since 4.2.0 The `$expiration` parameter was added.
* @since 4.4.0 The `$transient` parameter was added.
*
* @param mixed $value New value of transient.
* @param int $expiration Time until expiration in seconds.
* @param string $transient Transient name.
*/
$value = apply_filters("pre_set_transient_{$transient}", $value, $expiration, $transient);
/**
* Filters the expiration for a 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 transient.
* @param string $transient Transient name.
*/
$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 {
/*
* If expiration is requested, but the transient has no timeout option,
* delete, then re-create transient rather than update.
*/
$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) {
/**
* Fires after the value for a specific transient has been set.
*
* The dynamic portion of the hook name, `$transient`, refers to the transient name.
*
* @since 3.0.0
* @since 3.6.0 The `$value` and `$expiration` parameters were added.
* @since 4.4.0 The `$transient` parameter was added.
*
* @param mixed $value Transient value.
* @param int $expiration Time until expiration in seconds.
* @param string $transient The name of the transient.
*/
do_action("set_transient_{$transient}", $value, $expiration, $transient);
/**
* Fires after the value for a transient has been set.
*
* @since 3.0.0
* @since 3.6.0 The `$value` and `$expiration` parameters were added.
*
* @param string $transient The name of the transient.
* @param mixed $value Transient value.
* @param int $expiration Time until expiration in seconds.
*/
do_action('setted_transient', $transient, $value, $expiration);
}
return $result;
}