Les fonctions wp_cache_* de WordPress fournissent une couche de mise en cache qui se situe entre votre code et la base de données. Par défaut, WordPress utilise un cache en mémoire par requête (effacé à la fin de chaque requête). Avec un backend de cache d’objets persistant comme Redis ou Memcached, le cache survit entre les requêtes — les pages vues suivantes accèdent au cache au lieu de la base de données.
Sur un site à fort trafic avec Redis :
Pour des charges de travail lourdes en lecture, cela représente une amélioration de performance de 10 à 100 fois.
Chaque valeur de champ lue dans Field Forge passe par le cache d’objets :
“`php // À l’intérieur de l’implémentation de get_field() de Field Forge (simplifié) $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 (séparé des autres plugins)Lorsqu’une valeur de champ est mise à jour ou supprimée, Field Forge invalide automatiquement les entrées de cache pertinentes :
“php // À l'intérieur de update_field() (simplifié) $this->save_to_database($post_id, $field_name, $value); wp_cache_delete("fieldforge:{$post_id}:{$field_name}", 'fieldforge'); “
L’invalidation est :
fieldforge/cache/invalidateField Forge fonctionne avec n’importe quel backend de cache d’objets WordPress :
Le plus courant pour l’hébergement WordPress géré. Plugins gratuits : “Redis Object Cache” ou “W3 Total Cache” avec Redis activé. Fournit un cache persistant entre les requêtes.
Plus ancien mais toujours pris en charge. Plugins : “Memcached” ou “W3 Total Cache.”
Mise en cache sur un seul serveur qui est plus rapide que Redis/Memcached pour les sites à faible trafic (pas de saut réseau). Plugins : “APCu Object Cache.”
Si aucun backend de cache d’objets persistant n’est installé, Field Forge revient au cache par défaut de WordPress en requête. La mise en cache se produit toujours dans une seule page vue, mais pas entre les requêtes. Fonctionne partout, zéro configuration.
Pour les pages d’archive et les vues de liste où vous rendez de nombreux posts à la fois, Field Forge fournit une API batch_load() qui récupère des champs personnalisés pour plusieurs posts dans une seule requête SQL :
“`php $post_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; FieldForge::batch_load($post_ids);
// Tous les appels get_field() suivants sur ces ID de post accèdent au cache foreach ($post_ids as $id) { $hero_title = get_field(‘hero_title’, $id); // Accès au cache $hero_image = get_field(‘hero_image’, $id); // Accès au cache } “`
Sans batch_load(), ce qui précède déclencherait 20 requêtes SQL séparées (10 posts × 2 champs chacun). Avec le chargement par lots, c’est 1 requête.
Field Forge s’accroche au filtre the_posts de WordPress pour exécuter le chargement par lots automatiquement sur toute requête qui renvoie plusieurs posts :
“php // Hook interne 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; }); “
Les pages d’archive, les résultats de recherche, les listes de catégories et les points de terminaison de liste de l’API REST en bénéficient automatiquement. Aucun changement de code nécessaire dans votre thème.
Pour les appels WP_Query dans des modèles personnalisés, vous pouvez charger explicitement par lots après la requête :
“`php $query = new WP_Query([ ‘post_type’ => ‘product’, ‘posts_per_page’ => 30, ‘category_name’ => ‘featured’, ]);
// Chargement par lots des champs personnalisés pour les 30 produits en une seule requête if ($query->have_posts()) { $post_ids = wp_list_pluck($query->posts, ‘ID’); FieldForge::batch_load($post_ids); }
// Maintenant, le rendu de la boucle est uniquement un accès au cache while ($query->have_posts()) : $query->the_post(); $price = get_field(‘price’); // Accès au cache $sku = get_field(‘sku’); // Accès au cache $features = get_field(‘features’); // Accès au cache endwhile; “`
Sur un site de test avec 10 000 posts, 15 champs personnalisés par post :
| Action | Temps |
|---|---|
| Page vue d’un seul post | 45ms requêtes de champs personnalisés |
| Archive (20 posts) | 840ms requêtes de champs personnalisés (N+1) |
| Catégorie WooCommerce (30 produits) | 1 260ms |
| Action | Temps |
|---|---|
| Page vue d’un seul post | 3ms (accès au cache) |
| Archive (20 posts) | 12ms (accès au cache) |
| Catégorie WooCommerce (30 produits) | 18ms |
| Action | Temps |
|---|---|
| Page vue d’un seul post | 12ms (1 requête + remplissage du cache) |
| Archive (20 posts) | 95ms (1 requête par lot + remplissage du cache) |
| Catégorie WooCommerce (30 produits) | 142ms (1 requête par lot + remplissage du cache) |
La combinaison du cache d’objets et du chargement par lots est spectaculaire sur les sites à fort trafic.
Field Forge fournit des commandes WP-CLI pour surveiller la performance du cache :
“`bash
wp fieldforge cache stats
“`
Pour les sites où le taux d’accès au cache est faible (en dessous de 80 %), enquêtez :
“php add_filter('fieldforge/cache/expiration', function($seconds) { return DAY_IN_SECONDS; // Cache pour 24 heures }); “
“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) { // Invalider également les données connexes wp_cache_delete("my_custom_cache:{$post_id}", 'my_plugin'); }, 10, 2); “
Obtenez Field Forge — à partir de 35$/an →
L’intégration du cache d’objets et le chargement par lots sont présents dans chaque version de Field Forge, y compris la version gratuite.