Tribe__Cache::set_chunkable_transient( string $id, mixed $value, int $expiration, string|array $expiration_trigger = '' )
Sets a transient in the database with the knowledge that, if too large to be stored in one DB row, it will be chunked.
Contents
The method will redirect to the set_transient function if the site is using object caching.
Parameters
- $id
-
(string) (Required) The transient ID.
- $value
-
(mixed) (Required) The value to store, that could be chunked.
- $expiration
-
(int) (Required) The transient expiration, in seconds.
- $expiration_trigger
-
(string|<span class="array">array) (Optional) The transient expiration trigger(s).
Default value: ''
Return
(bool) Whether the transient, or the transient chunks, have been stored correctly or not.
Source
File: src/Tribe/Cache.php
public function set_chunkable_transient( $id, $value, $expiration = 0, $expiration_trigger = '' ) {
$transient = $this->get_id( $id, $expiration_trigger );
if ( wp_using_ext_object_cache() ) {
return $this->set_transient( $transient, $value, $expiration );
}
$inserted = [];
$serialized_value = maybe_serialize( $value );
$chunk_size = tribe( 'feature-detection' )->get_mysql_max_packet_size() * 0.9;
$chunks = str_split( $serialized_value, $chunk_size );
foreach ( $chunks as $i => $chunk ) {
$chunk_transient = $transient . '_' . $i;
$set = set_transient( $chunk_transient, $chunk, $expiration );
if ( ! $set ) {
foreach ( $inserted as $transient_to_delete ) {
delete_transient( $transient_to_delete );
}
return false;
}
$inserted[] = $chunk_transient;
}
return true;
}
Changelog
| Version | Description |
|---|---|
| 4.13.3 | Introduced. |