From 369b8826939125fb8dd39c96dde0f54cf9dbaa27 Mon Sep 17 00:00:00 2001 From: Valentin Le Moign Date: Thu, 28 May 2026 18:27:05 +0200 Subject: [PATCH] =?UTF-8?q?Affichage=20des=20dates=20:=20ann=C3=A9e=20seul?= =?UTF-8?q?e=20pour=20les=20Ouvrages,=20plage=20pour=20les=20s=C3=A9minair?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/post-card-helpers.php | 66 +++++++++++++++++++++++++++++++++------ inc/single-helpers.php | 18 ++++++++--- 2 files changed, 71 insertions(+), 13 deletions(-) diff --git a/inc/post-card-helpers.php b/inc/post-card-helpers.php index b85e61e..a3c9235 100644 --- a/inc/post-card-helpers.php +++ b/inc/post-card-helpers.php @@ -22,18 +22,66 @@ function thalim_get_card_data($post_id) { 'card_link' => '', ]; - // Event date — date_de_debut (events), fallback to datetime (communications) - // Used for display instead of post_date when set - foreach (['date_de_debut', 'datetime'] as $date_key) { - $event_raw = get_post_meta($post_id, $date_key, true) ?: ''; - if ($event_raw && !str_starts_with($event_raw, '0000-00-00')) { - $ts = strtotime($event_raw); - if ($ts) { - $data['card_event_date'] = date_i18n('d/m/Y', $ts); - $data['card_event_date_iso'] = date('Y-m-d', $ts); + // Category-based date formatting: + // - Séminaire (cat 11, not cat 12): "Du X au Y" from first/last linked séance dates + // - Ouvrage (cat 15): year only — includes the post.date fallback (overrides Twig default d/m/Y) + // - Default: date_de_debut > datetime > (empty → Twig falls back to post.date('d/m/Y')) + $cat_ids = wp_get_post_categories($post_id); + $is_seminaire = in_array(11, $cat_ids, true) && !in_array(12, $cat_ids, true); + $is_ouvrage = in_array(15, $cat_ids, true); + + if ($is_seminaire) { + // Aggregate timestamps from linked séances (Pods `seances` meta = array of post IDs) + $seance_ts = []; + foreach (get_post_meta($post_id, 'seances', false) as $sid) { + foreach (['date_de_debut', 'datetime'] as $key) { + $raw = get_post_meta($sid, $key, true) ?: ''; + if ($raw && !str_starts_with($raw, '0000-00-00')) { + $ts = strtotime($raw); + if ($ts) { $seance_ts[] = $ts; break; } + } + } + } + if (!empty($seance_ts)) { + sort($seance_ts); + $first = reset($seance_ts); + $last = end($seance_ts); + $fmt = 'd/m/Y'; // aligné sur le format standard des cards + if ($first === $last) { + $data['card_event_date'] = date_i18n($fmt, $first); + } else { + $lang = thalim_current_language(); + $prefix = $lang === 'en' ? 'From ' : 'Du '; + $infix = $lang === 'en' ? ' to ' : ' au '; + $data['card_event_date'] = $prefix . date_i18n($fmt, $first) . $infix . date_i18n($fmt, $last); + } + $data['card_event_date_iso'] = date('Y-m-d', $first); + } + // else: leave empty → Twig falls back to post.date('d/m/Y') + } else { + // Default + ouvrage handling + $display_fmt = $is_ouvrage ? 'Y' : 'd/m/Y'; + foreach (['date_de_debut', 'datetime'] as $date_key) { + $event_raw = get_post_meta($post_id, $date_key, true) ?: ''; + $formatted = thalim_format_date($event_raw, 'fr', $display_fmt); + if ($formatted) { + $data['card_event_date'] = $formatted; + $data['card_event_date_iso'] = date('Y-m-d', strtotime($event_raw)); break; } } + // Ouvrage fallback: if no custom date, use post.date but show year only + // (overrides the Twig's default post.date('d/m/Y') fallback) + if ($is_ouvrage && !$data['card_event_date']) { + $post = get_post($post_id); + if ($post) { + $formatted = thalim_format_date($post->post_date, 'fr', 'Y'); + if ($formatted) { + $data['card_event_date'] = $formatted; + $data['card_event_date_iso'] = date('Y-m-d', strtotime($post->post_date)); + } + } + } } // Resolve top-level parent category slug for color theming and direct category name for display diff --git a/inc/single-helpers.php b/inc/single-helpers.php index bc2cf50..33e6dba 100644 --- a/inc/single-helpers.php +++ b/inc/single-helpers.php @@ -1,14 +1,15 @@