Question

My workaround at the moment, within a shortcode, is to just copy the WP native code to get the Timezone within my (namespaced) class:

new \DateTimeZone( $this->wp_timezone_string() ));
private function wp_timezone_string() {
    $timezone_string = get_option( 'timezone_string' );

    if ( $timezone_string ) {
        return $timezone_string;
    }

    $offset  = (float) get_option( 'gmt_offset' );
    $hours   = (int) $offset;
    $minutes = ( $offset - $hours );

    $sign      = ( $offset < 0 ) ? '-' : '+';
    $abs_hour  = abs( $hours );
    $abs_mins  = abs( $minutes * 60 );
    $tz_offset = sprintf( '%s%02d:%02d', $sign, $abs_hour, $abs_mins );

    return $tz_offset;
}

But I'm wondering why I can't just call make a call to \wp_timezone() (escaped for namespace).

Is it because the file that contains that class hasn't loaded yet?

Was it helpful?

Solution

Thank you Tom J Nowell for the insightful comment above.

Turns out that wp_timezone is a relatively recent addition to Wordpress, and didn't exist in the version of WP I was developing in. It was added, as the Changelog says, in v5.3. I was using v5.2.

The function itself:

function wp_timezone() {
    return new DateTimeZone( wp_timezone_string() );
}

Simpy wraps the result of wp_timezone_string in a native php DateTimeZone object. The wp_timezone_string was also added in v5.3.

Since this is a brand new plugin, I'm not going to support older version of Wordpress. For pragmatic reasons, and in solidarity with the movement to encourage users to upgrade WP environments, I have also opted to not support versions of php (like v5.6) that are past their End of Life.

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top