Tienes un sitio Web y te gustaría consultar datos de otro sitio remoto, sabes que esto puede causar problemas de rendimiento, no te preocupes, puedes mantener los datos en cache de WordPress usando la API Transient.
1- Generalidades
La API Transients de WordPress te ofrece una manera simple de almacenar temporalmente datos de cache en la base de datos, específicamente en la tabla wp_options en donde se almacenan también las opciones de configuración de WordPress, con la diferencia de que los registros de Transients almacenan también una fecha de expiración.
En la siguiente imagen se pueden ver algunos registros transient de ejemplo:

Como se puede observar en la imagen, los registros tienen el texto transient (transitorio) como parte del nombre, además estan compuestos usualmente de pares, un registro almacena el valor y el otro la fecha de expiración en formato unix.
2- Creando Transients
Para crear crear un transient puedes usar la siguiente sintaxis:
set_transient( $transient, $valor, $expiracion );
- $transient:
Nombre único, en la imagen anterior esta pintado de verde, ten en cuenta además que el nombre no debería acceder más de 40 caracteres - $valor:
Datos a almacenar, puede ser de cualquier tipo, cadena, array u objeto, la API lo serializa de manera automática en caso de tratarse de datos complejos - $expiracion:
Valor entero que representa la máxima fecha, en formato unix, pasado esta fecha el registro no será considerado como válido. Se suelen utilizar constantes de para representar la expiración:MINUTE_IN_SECONDS = 60 (segundos) HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS
Tomando esto en cuenta crearemos un nuevo transient con el nombre dcms_license_text que nos almacene una cadena de texto y que tendrá una expiración de 10 minutos
set_transient( 'dcms_license_text', 'WordPress Web Publishing Software', MINUTE_IN_SECONDS*10 );
3- Recuperando Transients
Para recuperar un transient puedes usar la siguiente sintaxis:
get_transient( $transient );
En nuestro ejemplo anterior puedes recuperar la cadena de texto usando:
$cadena = get_transient( 'dcms_license_text' );
//$cadena = 'WordPress Web Publishing Software'
4- Eliminando Transients
Para eliminar manualmente un transient puedes usar la siguiente sintaxis:
delete_transient( $transient );
Esta función retorna verdadero si se eliminó correctamente o falso en caso no exista el transient en la base de datos. Se usa esta función usualmente al desinstalar un plugin para no dejar restos de los transients usados.
Usar transients no sobrecargará tu tabla wp_options, un transient al ser consultado si su fecha de expiración ha sido superada entonces será eliminado automáticamente.
5- Ejemplo de uso de Transients
En el siguiente ejemplo obtenemos los primeros 36 caracteres de un archivo de texto que esta ubicado en un servidor remoto, sin embargo para no estar consultando continuamente este archivo remoto cada vez que un usuario carga la web, almacenamos el texto en cache a través de la creación del transient dcms_licence_text y le damos la expiración de un día.
//función que devuelve los primeros caracteres de un archivo de texto remoto
function dcms_getremotetext(){
$license_text = wp_remote_get("https://decodecms.com/license.txt");
return substr($license_text['body'],0,36);
}
//función que imprime los caracteres devueltos por la función dcms_getremotetext
//y que optimiza la devolución almacenando los datos en cache por un día.
function dcms_gettextfooter() {
$remotetext = get_transient('dcms_licence_text');
if ( ! $remotetext ){
$remotetext = dcms_getremotetext();
set_transient('dcms_licence_text', $remotetext, DAY_IN_SECONDS );
}
echo $remotetext;
}
//Hoook de WordPress para mostrar el texto en el footer
add_action( 'wp_footer', 'dcms_gettextfooter' );
Genial como siempre, gracias
Gracias!
Excelente Explicación!
Gracias!