Usar Transients para cachear resultados
Los Transients son el sistema de caché temporal de WordPress. Almacenan datos en la base de datos (o en un sistema de caché externo como Redis si está configurado) durante un tiempo determinado. Son perfectos para evitar queries lentas, llamadas a APIs externas o procesamiento pesado que no necesita ejecutarse en cada petición.
Casos de uso: cachear resultados de WP_Query costosas, almacenar respuestas de APIs externas, guardar datos procesados que tardan en calcularse (estadísticas, conteos, transformaciones).
<?php
function mi_obtener_posts_destacados() {
$posts = get_transient( 'mi_posts_destacados' );
if ( false === $posts ) {
$query = new WP_Query( array(
'post_type' => 'proyecto',
'posts_per_page' => 3,
'meta_key' => '_destacado',
'meta_value' => '1',
) );
$posts = $query->posts;
set_transient( 'mi_posts_destacados', $posts, 12 * HOUR_IN_SECONDS );
wp_reset_postdata();
}
return $posts;
}
add_action( 'save_post_proyecto', function() {
delete_transient( 'mi_posts_destacados' );
} );
¿Qué hace cada parte?
- get_transient(): intenta recuperar el valor guardado. Devuelve
falsesi no existe o ha expirado — este es el patrón de comprobación estándar. - false === $posts: comparación estricta importante porque el valor guardado podría ser un array vacío
[], que es diferente defalse. - set_transient(): guarda el valor durante el tiempo especificado. El tercer parámetro es la duración en segundos.
- HOUR_IN_SECONDS: constante de WordPress que vale 3600. WordPress define otras como
DAY_IN_SECONDS,WEEK_IN_SECONDS,MONTH_IN_SECONDS. - save_post_proyecto: hook específico del CPT que se dispara al guardar un proyecto. Al borrarlo del caché en este momento, se asegura que la próxima visita regenere los datos actualizados.
- delete_transient(): invalida el caché manualmente. Sin esto, los cambios en el contenido tardarían hasta 12 horas en reflejarse.
