Affichage des dates : année seule pour les Ouvrages, plage pour les séminaires
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Format a Pods datetime string (e.g. "2026-01-17 00:00:00") into natural French/English.
|
||||
* Shows time only if not midnight.
|
||||
* Format a Pods datetime string (e.g. "2026-01-17 00:00:00") via date_i18n.
|
||||
* Default format is "j F Y" (full month name, FR/EN per WP locale).
|
||||
* Returns empty string for null/empty/"0000-00-00..." inputs.
|
||||
*/
|
||||
function thalim_format_date($raw, $lang = 'fr') {
|
||||
function thalim_format_date($raw, $lang = 'fr', $format = 'j F Y') {
|
||||
if (!$raw || str_starts_with($raw, '0000-00-00')) return '';
|
||||
$ts = strtotime($raw);
|
||||
if ($ts === false || $ts < 0) return '';
|
||||
return date_i18n('j F Y', $ts);
|
||||
return date_i18n($format, $ts);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -90,6 +91,15 @@ function thalim_get_single_data($post_id) {
|
||||
if ($ts_debut) $data['date_debut_ymd'] = date('Y-m-d', $ts_debut);
|
||||
if ($ts_fin) $data['date_fin_ymd'] = date('Y-m-d', $ts_fin);
|
||||
|
||||
// Ouvrages (cat 15): override display to year only — raw timestamps and
|
||||
// *_ymd fields stay full-precision so sorting/filtering on index pages
|
||||
// (`thalim_event_date_order`) keeps working.
|
||||
if (in_array(15, wp_get_post_categories($post_id), true)) {
|
||||
$data['date_de_debut'] = thalim_format_date($raw_debut, $lang, 'Y');
|
||||
$data['date_de_fin'] = thalim_format_date($raw_fin, $lang, 'Y');
|
||||
$data['datetime'] = thalim_format_date(get_post_meta($post_id, 'datetime', true), $lang, 'Y');
|
||||
}
|
||||
|
||||
// --- External links (up to 3) ---
|
||||
for ($i = 1; $i <= 3; $i++) {
|
||||
$url = get_post_meta($post_id, 'lien_externe_' . $i, true);
|
||||
|
||||
Reference in New Issue
Block a user