The date_i18n WordPress PHP filter allows you to change the formatted date based on the locale.
Usage
add_filter('date_i18n', 'your_custom_function', 10, 4); function your_custom_function($date, $format, $timestamp, $gmt) { // your custom code here return $date; }
Parameters
$date
(string) – Formatted date string.$format
(string) – Format to display the date.$timestamp
(int) – A sum of Unix timestamp and timezone offset in seconds. Might be without offset if input omitted timestamp but requested GMT.$gmt
(bool) – Whether to use GMT timezone. Only applies if timestamp was not provided. Default false.
More information
See WordPress Developer Resources: date_i18n
Examples
Change date format for a specific locale
Change the date format for the German locale.
add_filter('date_i18n', 'change_date_format_german_locale', 10, 4); function change_date_format_german_locale($date, $format, $timestamp, $gmt) { if (get_locale() == 'de_DE') { $format = 'd.m.Y'; $date = date_i18n($format, $timestamp, $gmt); } return $date; }
Display dates in uppercase
Transform the dates to uppercase.
add_filter('date_i18n', 'uppercase_dates', 10, 1); function uppercase_dates($date) { return strtoupper($date); }
Add custom prefix to dates
Add a custom prefix to dates.
add_filter('date_i18n', 'add_custom_prefix_to_dates', 10, 1); function add_custom_prefix_to_dates($date) { return 'Date: ' . $date; }
Change date format based on post type
Change the date format based on the post type.
add_filter('date_i18n', 'change_date_format_based_on_post_type', 10, 4); function change_date_format_based_on_post_type($date, $format, $timestamp, $gmt) { $post_type = get_post_type(); if ($post_type == 'event') { $format = 'F j, Y'; $date = date_i18n($format, $timestamp, $gmt); } return $date; }
Display dates in a custom format for a specific category
Display dates in a custom format for posts in the ‘news’ category.
add_filter('date_i18n', 'custom_date_format_for_news_category', 10, 4); function custom_date_format_for_news_category($date, $format, $timestamp, $gmt) { if (in_category('news')) { $format = 'l, F j, Y'; $date = date_i18n($format, $timestamp, $gmt); } return $date; }