Las funciones wp_cache_* de WordPress proporcionan una capa de caché que se sitúa entre tu código y la base de datos. Por defecto, WordPress utiliza un caché en memoria por solicitud (limpiado al final de cada solicitud). Con un backend de caché de objetos persistente como Redis o Memcached, la caché sobrevive entre solicitudes — las vistas de página posteriores acceden a la caché en lugar de a la base de datos.
En un sitio de alto tráfico con Redis:
Para cargas de trabajo con muchas lecturas, esto representa una mejora de rendimiento de 10 a 100 veces.
Cada valor de campo leído en Field Forge pasa por el cache de objetos:
“`php // Dentro de la implementación de get_field() de Field Forge (simplificado) $cached = wp_cache_get($cache_key, ‘fieldforge’); if ($cached !== false) { return $cached; }
$value = $this->fetch_from_database($post_id, $field_name); wp_cache_set($cache_key, $value, ‘fieldforge’, 3600); return $value; “`
fieldforge:{post_id}:{field_name}fieldforge (separado de otros plugins)Cuando un valor de campo se actualiza o se elimina, Field Forge invalida automáticamente las entradas de caché relevantes:
“php // Dentro de update_field() (simplificado) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge'); “
La invalidación es:
fieldforge/cache/invalidateField Forge funciona con cualquier backend de caché de objetos de WordPress:
El más común para hosting gestionado de WordPress. Plugins gratuitos: “Redis Object Cache” o “W3 Total Cache” con Redis habilitado. Proporciona caché persistente entre solicitudes.
Más antiguo pero aún soportado. Plugins: “Memcached” o “W3 Total Cache.”
Caché de un solo servidor que es más rápido que Redis/Memcached para sitios de bajo tráfico (sin salto de red). Plugins: “APCu Object Cache.”
Si no hay un backend de caché de objetos persistente instalado, Field Forge recurre al caché en memoria por defecto de WordPress. La caché aún ocurre dentro de una sola vista de página, pero no entre solicitudes. Funciona en todas partes, sin configuración.
Para páginas de archivo y vistas de lista donde estás renderizando muchos posts a la vez, Field Forge proporciona una API batch_load() que obtiene campos personalizados para múltiples posts en una sola consulta SQL:
“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);
// Todas las llamadas posteriores a get_field() en estos IDs de post acceden a la caché foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Acertar en caché $hero_image = get_field(‘hero_image’, $id); // Acertar en caché } “`
Sin batch_load(), lo anterior generaría 20 consultas SQL separadas (10 posts × 2 campos cada uno). Con la carga por lotes, es 1 consulta.
Field Forge se conecta al filtro the_posts de WordPress para ejecutar la carga por lotes automáticamente en cualquier consulta que devuelva múltiples posts:
“php // Hook interno de Field Forge add_filter('the_posts', function($posts) { if (!empty($posts)) { $post_ids = wp_list_pluck($posts, 'ID'); FieldForge::batch_load($post_ids); } return $posts; }); “
Páginas de archivo, resultados de búsqueda, listados de categorías y puntos finales de lista de la API REST se benefician automáticamente. No se necesitan cambios de código en tu tema.
Para llamadas a WP_Query en plantillas personalizadas, puedes cargar explícitamente por lotes después de la consulta:
“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);
// Carga por lotes de campos personalizados para los 30 productos en una consulta if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }
// Ahora renderizar el bucle es solo aciertos en caché mientras ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Acertar en caché $sku = get_field(‘sku’); // Acertar en caché $features = get_field(‘features’); // Acertar en caché endwhile; “`
En un sitio de prueba con 10,000 posts, 15 campos personalizados por post:
| Acción | Tiempo |
|---|---|
| Vista de página de un solo post | 45ms consultas de campos personalizados |
| Archivo (20 posts) | 840ms consultas de campos personalizados (N+1) |
| Categoría de WooCommerce (30 productos) | 1,260ms |
| Acción | Tiempo |
|---|---|
| Vista de página de un solo post | 3ms (aciertos en caché) |
| Archivo (20 posts) | 12ms (aciertos en caché) |
| Categoría de WooCommerce (30 productos) | 18ms |
| Acción | Tiempo |
|---|---|
| Vista de página de un solo post | 12ms (1 consulta + población de caché) |
| Archivo (20 posts) | 95ms (1 consulta por lotes + población de caché) |
| Categoría de WooCommerce (30 productos) | 142ms (1 consulta por lotes + población de caché) |
La combinación de caché de objetos y carga por lotes es dramática en sitios de alto tráfico.
Field Forge proporciona comandos de WP-CLI para monitorear el rendimiento de la caché:
“`bash
wp fieldforge cache stats
“`
Para sitios donde la tasa de aciertos de caché es baja (por debajo del 80%), investiga:
“php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Caché por 24 horas }); “
“php add_filter('fieldforge/cache/should_cache', function($should_cache, $field_group) { if ($field_group === 'frequently-changing-group') { return false; } return $should_cache; }, 10, 2); “
“php add_action('fieldforge/cache/invalidate', function($post_id, $field_name) { // También invalida datos relacionados wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2); “
Obtén Field Forge — desde $35/año →
La integración de caché de objetos y la carga por lotes están en todas las versiones de Field Forge, incluida la gratuita.