Функция WP_MAYBE_DECLINE_DATE() в WordPress: синтаксис, параметры, примеры

Функция 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() полезна для корректного отображения дат в зависимости от языка сайта, что делает ваш контент более понятным для пользователей.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *