Comment formater un champ Date ACF dans Elementor

ACF est un super plugin permettant (entre autres) de rajouter des champs à vos contenus dans WordPress. Il existe différents types de champs : textes, images, relations, etc et l’un des types de champ est un champ date.

Les dates sont stockées dans la base de données dans un certain format, et lorsqu’on souhaite réafficher cette date en front sur le site, on peut changer le format d’affichage pour passer par exemple de « 01/01/2023 » à « 1 Janvier 23 »

Php fournit plusieurs fonctions permettant de changer le type de formatage

En appelant dans un champ Elementor une valeur Date ACF, on ne peut pas choisir son formatage

Champ titre dans Elementor configuré pour afficher un champ Date, mais aucun moyen de formater cette valeur

Mais que peut on faire pour pouvoir formater cette valeur ? Hé bien il existe une solution, mais qui implique de passer par la création de shortcode.

En résumé, nous allons définir un nouveau shortcode prenant comme attribut le nom du champ ACF, et le formatage souhaité. Voici ce à quoi va ressembler notre shortcode au final :

[acf_date field='date_debut' date_format='MMM']

Ce shortcode prend 2 paramètres :

  • acf_date field est l’identifiant du champ date ACF, dans mon cas « date_debut »
  • date_format correspond au formatage souhaité de la date, dans mon cas « MMM » ramène le mois dans sa version courte, par ex : « juil. »

voici la liste des paramètres utilisables pour formater votre date (source : https://unicode-org.github.io/icu/userguide/format_parse/datetime/#datetime-format-syntax)

Symbol Meaning Pattern Example Output
G era designator G, GG, or GGG
GGGG
GGGGG
AD
Anno Domini
A
y year yy
y or yyyy
96
1996
Y year of “Week of Year” Y 1997
u extended year u 4601
U cyclic year name, as in Chinese lunar calendar U 甲子
r related Gregorian year r 1996
Q quarter Q
QQ
QQQ
QQQQ
QQQQQ
2
02
Q2
2nd quarter
2
q stand-alone quarter q
qq
qqq
qqqq
qqqqq
2
02
Q2
2nd quarter
2
M month in year M
MM
MMM
MMMM
MMMMM
9
09
Sep
September
S
L stand-alone month in year L
LL
LLL
LLLL
LLLLL
9
09
Sep
September
S
w week of year w
ww
27
27
W week of month W 2
d day in month d
dd
2
02
D day of year D 189
F day of week in month F 2 (2nd Wed in July)
g modified julian day g 2451334
E day of week E, EE, or EEE
EEEE
EEEEE
EEEEEE
Tue
Tuesday
T
Tu
e local day of week
example: if Monday is 1st day, Tuesday is 2nd )
e or ee
eee
eeee
eeeee
eeeeee
2
Tue
Tuesday
T
Tu
c stand-alone local day of week c or cc
ccc
cccc
ccccc
cccccc
2
Tue
Tuesday
T
Tu
a AM or PM a, aa, or aaa
aaaa
aaaaa
PM [abbrev]
PM [wide]
p
b am, pm, noon, midnight b, bb, or bbb
bbbb
bbbbb
mid.
midnight
md
B flexible day periods B, BB, or BBB
BBBB
BBBBB
at night [abbrev]
at night [wide]
at night [narrow]
h hour in am/pm (1~12) h
hh
7
07
H hour in day (0~23) H
HH
0
00
k hour in day (1~24) k
kk
24
24
K hour in am/pm (0~11) K
KK
0
00
m minute in hour m
mm
4
04
s second in minute s
ss
5
05
S fractional second – truncates (like other time fields)
to the count of letters when formatting. Appends
zeros if more than 3 letters specified. Truncates at
three significant digits when parsing.
S
SS
SSS
SSSS
2
23
235
2350
A milliseconds in day A 61201235
z Time Zone: specific non-location z, zz, or zzz
zzzz
PDT
Pacific Daylight Time
Z Time Zone: ISO8601 basic hms? / RFC 822
Time Zone: long localized GMT (=OOOO)
TIme Zone: ISO8601 extended hms? (=XXXXX)
Z, ZZ, or ZZZ
ZZZZ
ZZZZZ
-0800
GMT-08:00
-08:00, -07:52:58, Z
O Time Zone: short localized GMT
Time Zone: long localized GMT (=ZZZZ)
O
OOOO
GMT-8
GMT-08:00
v Time Zone: generic non-location
(falls back first to VVVV)
v
vvvv
PT
Pacific Time or Los Angeles Time
V Time Zone: short time zone ID
Time Zone: long time zone ID
Time Zone: time zone exemplar city
Time Zone: generic location (falls back to OOOO)
V
VV
VVV
VVVV
uslax
America/Los_Angeles
Los Angeles
Los Angeles Time
X Time Zone: ISO8601 basic hm?, with Z for 0
Time Zone: ISO8601 basic hm, with Z
Time Zone: ISO8601 extended hm, with Z
Time Zone: ISO8601 basic hms?, with Z
Time Zone: ISO8601 extended hms?, with Z
X
XX
XXX
XXXX
XXXXX
-08, +0530, Z
-0800, Z
-08:00, Z
-0800, -075258, Z
-08:00, -07:52:58, Z
x Time Zone: ISO8601 basic hm?, without Z for 0
Time Zone: ISO8601 basic hm, without Z
Time Zone: ISO8601 extended hm, without Z
Time Zone: ISO8601 basic hms?, without Z
Time Zone: ISO8601 extended hms?, without Z
x
xx
xxx
xxxx
xxxxx
-08, +0530
-0800
-08:00
-0800, -075258
-08:00, -07:52:58
' escape for text ' (nothing)
' ' two single quotes produce one ' '

Voici le code PHP permettant de faire fonctionner ce shortcode,

// On définit la fonction utilisée par le shortcode
function acf_date_shortcode( $atts ) {
	// extract attributs
	extract( shortcode_atts( array(
		'field'			=> '',
		'post_id'		=> false,
		'format_value'	=> true,
		'date_format' 	=> ''
	), $atts ) );
// On récupère le champ acf
	$acf_date = get_field( $field, $post_id, $format_value );
// On en crée une date ç partir de la date récupérée d'ACF
	$date = DateTime::createFromFormat('d/m/Y', $acf_date);
// On initialise la manière dont on va formater la date, remarquez bien le fr_FR pour bien l'avoir en français
	$formatter = new IntlDateFormatter('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::NONE);
// On utilise pour formater la chaine de formatage qu'on passe en paramètre du
	$formatter->setPattern($date_format);
// On applique le formatage souhaité sur notre date
	$date_format_fr = $formatter->format($date);
// On retourne le résultat pour l'afficher à l'emplacement du shortcode
	return $date_format_fr;
}
// on créé le shortcode
add_shortcode( 'acf_date', 'acf_date_shortcode' );

Pour rajouter ce code, vous pouvez utiliser soit le rajouter dans le functions.php de votre thème enfant, ou encore via un plugin comme code snippet ()

Une fois le code rajouté, vous pourrez utiliser le shortcode qui va vous permettre de formater un champ date ACF comme vous voulez.
Cela fonctionne aussi très bien dans une loop de posts, comme c’est mon cas ici

Picture of mike

mike

Chef de projet web, Mike assure la réussite de projets digitaux depuis 2011. Son but est d'aider les webmasters et les freelances à tirer le meilleur des outils comme WordPress, WooCommerce et Elementor. Sur ce blog il partage son expérience, ses astuces et les pépites dénichées sur le web. Côté pro, Mike adore apprendre de nouveaux trucs et faire progresser les autres, et côté perso les afters, faire des shoots de baskets et les films d'horreur. La légende raconte qu'avec un mojito il vous accordera +4xp de confiance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Thématiques

Vous recherchez des astuces dans un secteur donné ? Vous pouvez accéder directement à la catégorie qui vous intéresse !