## WP_TIMEZONE_CHOICE() │ WP 2.9.0
Функция WP_TIMEZONE_CHOICE()
генерирует список строк временных зон в формате <option>
, который можно использовать в элементах <select>
.
Работает на основе функции PHP timezone_identifiers_list()
.
### Производительность
- Время выполнения для 1 вызова: 0.009122 секунды (очень медленно).
- Время выполнения для 50000 вызовов: 332.63 секунды (крайне медленно).
- Используемая версия PHP: 7.0.5, WordPress: 4.5.
### Важные сведения
- Нет хуков.
### Возвращаемое значение
Функция возвращает строку с HTML-кодом.
### Использование
```php
wp_timezone_choice( $selected_zone, $locale );
$selected_zone
(string) — Обязательный параметр. Выбранная временная зона.$locale
(string) — Языковые настройки для загрузки временных зон. По умолчанию: текущая языковая настройка сайта.
Примеры использования
Пример 1: Вывод списка временных зон внутри тега <select>
Результат:
Изменения
- С версии 2.9.0 — внедрена функция.
- С версии 4.7.0 — добавлен параметр
$locale
.
Код функции
function wp_timezone_choice( $selected_zone, $locale = null ) {
static $mo_loaded = false, $locale_loaded = null;
$continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific' );
// Загружаем переводы для континентов и городов.
if ( ! $mo_loaded || $locale !== $locale_loaded ) {
$locale_loaded = $locale ? $locale : get_locale();
$mofile = WP_LANG_DIR . '/continents-cities-' . $locale_loaded . '.mo';
unload_textdomain( 'continents-cities', true );
load_textdomain( 'continents-cities', $mofile, $locale_loaded );
$mo_loaded = true;
}
$tz_identifiers = timezone_identifiers_list();
$zonen = array();
foreach ( $tz_identifiers as $zone ) {
$zone = explode( '/', $zone );
if ( ! in_array( $zone[0], $continents, true ) ) {
continue;
}
// Проверяем, какие части зоны существуют.
$exists = array(
0 => ( isset( $zone[0] ) && $zone[0] ),
1 => ( isset( $zone[1] ) && $zone[1] ),
2 => ( isset( $zone[2] ) && $zone[2] ),
);
$exists[3] = ( $exists[0] && 'Etc' !== $zone[0] );
$exists[4] = ( $exists[1] && $exists[3] );
$exists[5] = ( $exists[2] && $exists[3] );
$zonen[] = array(
'continent' => ( $exists[0] ? $zone[0] : '' ),
'city' => ( $exists[1] ? $zone[1] : '' ),
'subcity' => ( $exists[2] ? $zone[2] : '' ),
't_continent' => ( $exists[3] ? translate( str_replace( '_', ' ', $zone[0] ), 'continents-cities' ) : '' ),
't_city' => ( $exists[4] ? translate( str_replace( '_', ' ', $zone[1] ), 'continents-cities' ) : '' ),
't_subcity' => ( $exists[5] ? translate( str_replace( '_', ' ', $zone[2] ), 'continents-cities' ) : '' ),
);
}
usort( $zonen, '_wp_timezone_choice_usort_callback' );
$structure = array();
if ( empty( $selected_zone ) ) {
$structure[] = '';
}
foreach ( $zonen as $key => $zone ) {
$value = array( $zone['continent'] );
if ( empty( $zone['city'] ) ) {
$display = $zone['t_continent'];
} else {
if ( ! isset( $zonen[ $key - 1 ] ) || $zonen[ $key - 1 ]['continent'] !== $zone['continent'] ) {
$structure[] = '';
}
}
$structure[] = '';
$structure[] = '';
return implode( "n", $structure );
}
Связанные функции
comment_date()
comment_time()
current_time()
date_i18n()
get_comment_date()
get_comment_time()
get_date_from_gmt()
get_gmt_from_date()
- и другие функции, связанные с датой и временем в WordPress.