diff --git a/app/models/TraductionLangue_Model.php b/app/models/TraductionLangue_Model.php index 45821e7..6d45896 100644 --- a/app/models/TraductionLangue_Model.php +++ b/app/models/TraductionLangue_Model.php @@ -1015,19 +1015,24 @@ class CRVI_TraductionLangue_Model extends Main_Model { error_log('🔍 Posts de capacités récupérés: ' . count($capacites_posts)); if (empty($capacites_posts)) { - // Mettre en cache un résultat vide + error_log('⚠️ Aucune capacité active trouvée - résultat vide'); + // Ne pas mettre en cache un résultat vide trop longtemps (1 heure au lieu de 1 jour) if ($use_cache) { - \set_transient($cache_key, [], 1 * \DAY_IN_SECONDS); + \set_transient($cache_key, [], 1 * \HOUR_IN_SECONDS); } return []; } // Construire une liste unique de langues à partir des capacités actives $langues_ids = []; + $capacites_sans_langue = 0; foreach ($capacites_posts as $post) { $langue_field = \get_field('langue', $post->ID); // Le champ langue est un tableau d'IDs (multi-select) if (is_array($langue_field)) { + if (empty($langue_field)) { + $capacites_sans_langue++; + } foreach ($langue_field as $langue_id) { if (!empty($langue_id) && !in_array($langue_id, $langues_ids)) { $langues_ids[] = (int) $langue_id; @@ -1039,10 +1044,15 @@ class CRVI_TraductionLangue_Model extends Main_Model { if (!in_array($langue_id, $langues_ids)) { $langues_ids[] = $langue_id; } + } else { + $capacites_sans_langue++; } } - error_log('🔍 IDs de langues uniques: ' . print_r($langues_ids, true)); + if ($capacites_sans_langue > 0) { + error_log('⚠️ ' . $capacites_sans_langue . ' capacité(s) active(s) sans langue assignée'); + } + error_log('🔍 IDs de langues uniques trouvées: ' . count($langues_ids) . ' - ' . print_r($langues_ids, true)); if (empty($langues_ids)) { // Mettre en cache un résultat vide @@ -1054,21 +1064,31 @@ class CRVI_TraductionLangue_Model extends Main_Model { // Récupérer les objets termes pour ces langues $langues_terms = []; + $langues_manquantes = []; foreach ($langues_ids as $langue_id) { $term = \get_term($langue_id, 'langue'); if ($term && !\is_wp_error($term)) { $langues_terms[] = $term; + } else { + $langues_manquantes[] = $langue_id; + error_log('⚠️ Langue ID ' . $langue_id . ' référencée dans une capacité mais non trouvée dans la taxonomie'); } } - error_log('🔍 Langues récupérées: ' . count($langues_terms)); + error_log('🔍 Langues récupérées: ' . count($langues_terms) . ' sur ' . count($langues_ids)); + if (!empty($langues_manquantes)) { + error_log('⚠️ Langues manquantes (IDs): ' . implode(', ', $langues_manquantes)); + } error_log('🔍 Date de début: ' . $date_debut); error_log('🔍 Date de fin: ' . $date_fin); if (empty($langues_terms)) { - // Mettre en cache un résultat vide + error_log('⚠️ Aucune langue valide trouvée - résultat vide'); + // Ne pas mettre en cache un résultat vide trop longtemps pour permettre un recalcul rapide + // Si des langues manquantes sont détectées, mettre un cache très court (5 minutes) + $cache_duration = !empty($langues_manquantes) ? 5 * \MINUTE_IN_SECONDS : 1 * \HOUR_IN_SECONDS; if ($use_cache) { - \set_transient($cache_key, [], 1 * \DAY_IN_SECONDS); + \set_transient($cache_key, [], $cache_duration); } return []; } @@ -1115,6 +1135,17 @@ class CRVI_TraductionLangue_Model extends Main_Model { return $result; } + /** + * Invalide le cache pour une période spécifique + * @param string $date_debut Date de début (Y-m-d) + * @param string $date_fin Date de fin (Y-m-d) + */ + public static function invalidate_cache_periode(string $date_debut, string $date_fin): void { + $cache_key = 'crvi_langues_capacites_acf_' . $date_debut . '_' . $date_fin; + \delete_transient($cache_key); + error_log('🗑️ Cache invalidé pour la période ' . $date_debut . ' à ' . $date_fin); + } + /** * Invalide le cache pour une capacité donnée * À appeler lors de la création/modification/suppression d'événements ou de capacités