wp_timezone_choice
Gives a nicely-formatted list of timezone strings.
Description
Returns (string)
Parameters (2)
- 0. $selected_zone (string)
- The selected zone.
- 1. $locale — Optional. (null) =>
null
- Locale to load the timezones in. Default current site locale.
Usage
if ( !function_exists( 'wp_timezone_choice' ) ) { require_once ABSPATH . WPINC . '/functions.php'; } // The selected zone. $selected_zone = ''; // Optional. Locale to load the timezones in. Default current site locale. $locale = null; // NOTICE! Understand what this does before running. $result = wp_timezone_choice($selected_zone, $locale);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/functions.php
- 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');
- // Loadtranslationsfor continents and cities.
- 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' );
- load_textdomain( 'continents-cities', $mofile );
- $mo_loaded = true;
- }
- $zonen = array();
- foreach ( timezone_identifiers_list() as $zone ) {
- $zone = explode( '/', $zone );
- if ( !in_array( $zone[0], $continents ) ) {
- continue;
- }
- // This determines what gets set and translated - we don't translate Etc/* strings here, they are done later
- $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] : '' ),
- );
- }
- usort( $zonen, '_wp_timezone_choice_usort_callback' );
- $structure = array();
- if ( empty( $selected_zone ) ) {
- $structure[] = '<option selected="selected" value="">' . __( 'Select a city' ) . '</option>';
- }
- foreach ( $zonen as $key => $zone ) {
- // Build value in an array to join later
- $value = array( $zone['continent'] );
- if ( empty( $zone['city'] ) ) {
- // It's at the continent level (generally won't happen)
- $display = $zone['t_continent'];
- } else {
- // It's inside a continent group
- // Continent optgroup
- if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
- $label = $zone['t_continent'];
- $structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
- }
- // Add the city to the value
- $value[] = $zone['city'];
- $display = $zone['t_city'];
- if ( !empty( $zone['subcity'] ) ) {
- // Add the subcity to the value
- $value[] = $zone['subcity'];
- $display .= ' - ' . $zone['t_subcity'];
- }
- }
- // Build the value
- $value = join( '/', $value );
- $selected = '';
- if ( $value === $selected_zone ) {
- $selected = 'selected="selected" ';
- }
- // Close continent optgroup
- if ( !empty( $zone['city'] ) && ( !isset($zonen[$key + 1]) || (isset( $zonen[$key + 1] ) && $zonen[$key + 1]['continent'] !== $zone['continent']) ) ) {
- $structure[] = '</optgroup>';
- }
- }
- // Do UTC
- $structure[] = '<optgroup label="'. esc_attr__( 'UTC' ) .'">';
- $selected = '';
- if ( 'UTC' === $selected_zone )
- $selected = 'selected="selected" ';
- $structure[] = '</optgroup>';
- // Do manual UTC offsets
- $structure[] = '<optgroup label="'. esc_attr__( 'Manual Offsets' ) .'">';
- $offset_range = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5,
- 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14);
- foreach ( $offset_range as $offset ) {
- if ( 0 <= $offset )
- $offset_name = '+' . $offset;
- else
- $offset_name = (string) $offset;
- $offset_value = $offset_name;
- $offset_name = str_replace(array('.25', '.5', '.75'), array(':15', ':30', ':45'), $offset_name);
- $offset_name = 'UTC' . $offset_name;
- $offset_value = 'UTC' . $offset_value;
- $selected = '';
- if ( $offset_value === $selected_zone )
- $selected = 'selected="selected" ';
- }
- $structure[] = '</optgroup>';
- return join( "\n", $structure );
- }