Créateur de thèmes WordPress :: Formateur :: Web Designer

Créer une date internationalisable avec ACF

Publié le : 

Modifié le : 

Par : 

Nous verrons dans ce tutoriel comment créer un champ de date dans ACF qui est internationalisable en fonction de la langue choisie dans le back-office. Ce tuto est inspiré de la documentation en ligne d’ACF.

Création du champ de date dans ACF

Je vais d’abord créé un champs date avec les réglages par défaut.

Capture: Installation du Champs date dans ACF

Afficher la date dans la boucle

D’abord, tous les formats de date disponibles dans WordPress sont dans le codex.

Enregistrement des données

Les données sont enregistrées sous la forme PHP car par défaut, ACF utilise un format jQuery.

<?php
$date_d = get_field('gn_date_debut');

// Extraire Y,M,D
$y = substr($date_d, 0, 4);
$m = substr($date_d, 4, 2);
$d = substr($date_d, 6, 2);

// Créer le format UNIX
$time_d = strtotime("{$d}-{$m}-{$y}");
?>
  • j’obtiens le résultat du champs avec la variable $date_d
  • j’extrais chaque partie de la date avec les trois variables qui suivent au format PHP
  • avec la variable $time_d, je créée la version Unix de la date avec toutes variables précédentes

Afficher les données

<p class="date_month">Du</p> 
<p class="date_day">
<?php echo date('d', $time_d); ?>
</p>            
<p class="date_month">
<?php echo date_i18n('M', $time_d); ?>
</p>
  • la première date n’a pas de format particulier car c’est un nombre
  • la deuxième date utilise la fonction date_i18n. Elle permet d’afficher la date au bon format si elle a utilisée le format Unix (voir plus haut avec la variable $time_d)

Résulat en ligne

Dans mon exemple en ligne, j’ai une date de début et une date de fin mais le principe reste le même dans les deux cas.

Capture: ACF résultat en ligne du champs date

15 réponses

  1. Julien Maury

    Salut, Grégoire, merci pour cet article. Effectivement la gestion des dates est un point-clé et ACF est une bonne solution pour automatiser tout cela en évitant les soucis éventuel de timestamp.

    Attention la fonction PHP est substr() et pas subtr() (erreur de frappe) , elle ne stocke pas mais coupe la chaîne où cela nous arrange.

    1. Salut Julien
      Merci pour tes remarques. J’ai corrigé mes coquilles 🙂

  2. Hello,
    Le fait d’enregistrer ta date au format yymmdd permet de faire directement un strtotime sur le retour de ta valeur et avoir un timestamp 😉

    $time_d = strtotime(get_field('gn_date_debut'));

    1. Merci Nicolas 🙂 C’est corriger.

  3. Salut Grégoire,

    Je ne comprends pas pourquoi tu fais ta moulinette pour obtenir le timestamp de la date. Il te suffit de mettre « Yes » a « Save as timestamp? » dans les options du champ pour que tu es directement $time_d = get_field(‘gn_date_debut’);

    1. Salut Jonathan. Merci. C’est bien d’être entouré d’experts (+Nicolas). J’ai modifié.

    2. Alexandre Sadowski

      Jonathan,
      Il me semble que l’option d’enregistrement « Save as timestamp? » se trouve dans l’add-on : http://www.advancedcustomfields.com/add-ons/date-time-picker/ et non dans le champ « date » se trouvant dans le coeur d’ACF

      1. Merci Alexandre. Oui effectivement, en natif je n’ai rien trouvé.

        1. Jonathan Buttigieg

          Oui en effet, ce n’est pas disponible en natif, c’est via le plugin indiqué par Alexandre 🙁

  4. Alexandre Sadowski

    Hello Grégoire,

    D’autres petites astuces également à connaitre avec les dates d’ACF. Le fait d’enregistrer un format « yymmdd » pourra te permettre de faire des meta_query pour faire des comparaisons entre deux dates et bien meilleur que si le format était sauvegardé en timestamp.

    Autre astuce si jamais tu enregistres ta date au format timestamp « @ », jQuery t’enregistrera le timestamp en ms hors le timestamp UNIX est en secondes, il faudra donc à chaque fois faire  » * 1000  » pour avoir le bon résultat attendu.

    1. Merci encore Alexandre. J’ai ajouté ton commentaire dans l’article.

    2. Jonathan Buttigieg

      Est-ce que tu pourrais expliquer pourquoi (ou via un exemple) le format yymmdd est bien meilleur que le timestamp ? Tu parles de perf ou meilleur en terme de manipulation ?

      Pour le timestamp jQuery, c’est bizarre que tu es ce comportement, parce que perso il me l’enregistre bien directement en secondes. J’ai peut-être loupé quelque chose à un moment.

      1. Alexandre Sadowski

        Effectivement je me suis mal exprimé. Je parlais en terme de manipulation et non en terme de performance.

        Pour le timestamp jQuery, le problème est sur le « date » natif d’ACF et non sur l’add-on cité plus haut.

  5. […] Nous verrons comment utiliser le champ de date Advanced Custom Field ACF dans WordPress. Le format supportera l'internationalisation.  […]

  6. Bonjour, dans le cadre de séances de cinéma, je souhaiterais rajouter un custom field dans mes champs date pour signaler que certaines séances (mais pas toutes donc) sont accessibles au malvoyants/malentendants par l’affichage d’un picto à côté de la date. Une idée ? Merci