Функция WP_MAYBE_DECLINE_DATE() в WordPress
Функция WP_MAYBE_DECLINE_DATE() в WordPress определяет, нужно ли изменять форму даты на правильную в зависимости от языка сайта. Если для языка требуется использовать родительный падеж для названий месяцев (например, в формате 'j F Y'), то название месяца будет заменено на корректную форму.
Использование функции
Функция имеет следующий синтаксис:
wp_maybe_decline_date( $date, $format );
Параметры
- $date (string, обязательный): Строка с отформатированной датой.
- $format (string, необязательный): Формат даты для проверки. По умолчанию — пустая строка.
Возвращаемое значение
Функция возвращает строку. Это дата, измененная в соответствии с локализацией, если это требуется.
Примеры использования функции
Эта функция будет работать только в том случае, если части даты в языке сайта могут быть изменены. Эта опция задается в строке перевода 'включено' === _x('выключено', 'изменять названия месяцев: включено или выключено').
Пример 1
Предположим, что наш сайт работает на русском языке, где месяцы могут изменяться:
echo wp_maybe_decline_date( '15 Май 2019' ); // Вывод: 15 мая 2019
В этом случае месяц правильно записан, и функция ничего не меняет.
Пример 2
Если месяц записан с ошибкой, функция просто вернет его без изменений:
echo wp_maybe_decline_date( 'Май 2019 года' ); // Вывод: Май 2019 года
Пример 3
Для разных форматов даты:
echo wp_maybe_decline_date( '15 Мая 2019' ); // Вывод: 15 Мая 2019
echo wp_maybe_decline_date( '15 мая 2019' ); // Вывод: 15 мая 2019
Краткие примечания
- Эта функция использует глобальный объект
WP_Locale, который хранит информацию о языке и времени в WordPress.
Изменения
- С версии 4.4.0: Функция была введена.
- С версии 5.4.0: Добавлен параметр
$format.
Код функции
Вот как выглядит реализация функции wp_maybe_decline_date в файле wp-includes/functions.php:
function wp_maybe_decline_date( $date, $format = '' ) {
global $wp_locale;
if ( ! function_exists( '_x' ) ) {
return $date;
}
if ( 'on' === _x( 'off', 'decline months names: on or off' ) ) {
$months = $wp_locale->month;
$months_genitive = $wp_locale->month_genitive;
if ( $format ) {
$decline = preg_match( '#[dj].? F#', $format );
} else {
$decline = preg_match( '#bd{1,2}.? [^d ]+b#u', $date );
}
if ( $decline ) {
foreach ( $months as $key => $month ) {
$months[ $key ] = '# ' . preg_quote( $month, '#' ) . 'b#u';
}
foreach ( $months_genitive as $key => $month ) {
$months_genitive[ $key ] = ' ' . $month;
}
$date = preg_replace( $months, $months_genitive, $date );
}
if ( $format ) {
$decline = preg_match( '#F [dj]#', $format );
} else {
$decline = preg_match( '#b[^d ]+ d{1,2}(st|nd|rd|th)?b#u', trim( $date ) );
}
if ( $decline ) {
foreach ( $months as $key => $month ) {
$months[ $key ] = '#b' . preg_quote( $month, '#' ) . ' (d{1,2})(st|nd|rd|th)?([-–]d{1,2})?(st|nd|rd|th)?b#u';
}
foreach ( $months_genitive as $key => $month ) {
$months_genitive[ $key ] = '$1$3 ' . $month;
}
$date = preg_replace( $months, $months_genitive, $date );
}
}
$locale = get_locale();
if ( 'ca' === $locale ) {
$date = preg_replace( '# de ([ao])#i', " d'1", $date );
}
return $date;
}
Функция wp_maybe_decline_date() полезна для корректного отображения дат в зависимости от языка сайта, что делает ваш контент более понятным для пользователей.