twig-Erweiterung für WordPress-Plugin

"JSON Content Importer" WordPress PluginKernelement der PRO-Version meines WordPress-Plugins JSON Content Importer ist die Template-Engine twig, die auch in Symfony2-PHP-Framework zum einsatz kommt. Von Haus aus kann twig schon einiges, manches leider aber nicht.

Konkret vermisste ich die Mögichkeit, Datum- und Zeitangaben möglichst flexibel einzustellen. Denn ein niederländischer Kunde meines Plugins wollte die niederländische Wochentags-Bezeichnung anzeigen. Damit das möglich ist, habe ich eine Erweiterung für twig geschrieben, die in Aktion wie folgt aussieht:

{{ zeit | 
dateformat('%A %m/%d/%y %H:%M:%S', 'Europe/Berlin', 'nl_NL') }}

Das Ergebnis kann man hier sehen: Die Namen der Wochentage sind in niederländischer Sprache angezeigt.

“zeit” steht dabei für das Feld mit der Datumsangabe im JSON-Feed. die Pipe “|” bewirkt, dass der folgende Code auf dieses Feld angewendet wird.
Dieser Code ist die Funktion “dateformat” die wie folgt aussieht:

$twig_extra_filter_dateformat = 
new Twig_SimpleFilter('dateformat', 
function ($data, $dateformatstr, $datetimezone, $datelocale) {
  $curentTimezone = date_default_timezone_get();
  date_default_timezone_set($datetimezone);
  $validDateLocale = FALSE;
  if (preg_match("/([a-z_]*)/i", $datelocale)) {
    $validDateLocale = TRUE;
  }
  if ($validDateLocale) {
    $getlocale = setlocale (LC_TIME,"0");
    setlocale(LC_TIME, $datelocale);
  }
  if (!( is_numeric($data) && (int)$data == $data )) {
    $data = strtotime($data);
  }
  $formattedDate = strftime($dateformatstr, $data);
  if ($validDateLocale) {
    setlocale(LC_TIME, getlocale);
  }
  date_default_timezone_set($curentTimezone);
  return $formattedDate;
});

$data enthält “ziel”, die drei Argumente sind: