有人能告诉我如何获取WordPress管理中设置的时区吗?
例如,如果博客设置为东部时间,我需要精确的字符串来打印:
美国/东部
这是针对存在于函数中的函数。php在我的主题中。
有人能告诉我如何获取WordPress管理中设置的时区吗?
例如,如果博客设置为东部时间,我需要精确的字符串来打印:
美国/东部
这是针对存在于函数中的函数。php在我的主题中。
如果需要gmt\\u偏移,则
<?php echo get_option(\'gmt_offset\'); ?>
如果需要时区字符串,请使用
<?php echo get_option(\'timezone_string\'); ?>
不幸的是,确实有两种不同的选择:
更新的timezone_string
, 这节省了PHP风格的时区gmt_offset, 它以小时为单位保存数字浮动偏移量但在较新的环境中timezone_string
实际覆盖gmt_offset
, 后者返回的值将基于前者。然而,相反的说法并不正确-gmt_offset
可能有效,而timezone_string
为空。
WordPress 5.3已发货wp_timezone()
函数,它对此进行抽象并返回有效的DateTimeZone
对象,而不考虑基础WP设置。
在此之前,我在WpDateTime
library (对于用作核心实施基础的琐事):
class WpDateTimeZone extends \\DateTimeZone {
/**
* Determine time zone from WordPress options and return as object.
*
* @return static
*/
public static function getWpTimezone() {
$timezone_string = get_option( \'timezone_string\' );
if ( ! empty( $timezone_string ) ) {
return new static( $timezone_string );
}
$offset = get_option( \'gmt_offset\' );
$hours = (int) $offset;
$minutes = abs( ( $offset - (int) $offset ) * 60 );
$offset = sprintf( \'%+03d:%02d\', $hours, $minutes );
return new static( $offset );
}
}
检查Option Reference page. 选项gmt_offset
返回一个整数。例如,如果时区设置为东部时间(例如美国/纽约),gmt_offset
应为-5。
别以为你会得到像US/Eastern 无需将所需的所有字符串存储在一个数组中并引用它们。使用PHP可以获得时区缩写,即EST; 如果这些值存储在一个包含所需字符串的数组中,则可以查找它们。
<?php date_default_timezone_set(get_option(\'timezone_string\'));
echo date(\'T\'); // will give you three-character string like "EST"
$timezones = array (
\'EST\' => \'US/Eastern\',
\'CST\' => \'US/Central\',
// etc, etc, etc.
);
echo $timezones [ date(\'T\') ]; // should be what you want.
?>
鉴于wordpress在选项表中保留时区字符串,您可以使用面向对象的方法在wordpress站点上获取正确的时间:
$tz = new DateTimeZone(get_option(\'timezone_string\'));
$dt = new DateTime("now", $tz);
$page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
添加到BainerNet(我添加这个作为一个答案,因为我不能发表评论——我在WP开发堆栈上的分数不到50分)。
如果您在“常规设置”中选择时区字符串,WordPress将只存储时区字符串。UTF选择是列表中的默认值,但您可以滚动到时区字符串。如果设置时区字符串,将同时设置UTF和时区字符串。它们将是相同的(这意味着,当您选择时区字符串时区时,UTF将重置为新区域)。
(WordPress 4)
有几个选择,没有一个真正有效。这是一个WordPress bug,它真的很糟糕,因为时间不对,除非您将站点设置为UTC。。。这令人困惑,甚至不可能。
我认为,只有当您选择时区(在管理中的“设置->常规”下)作为命名城市而不是GMT数字偏移量时,下一个代码才有效。我还没有测试过,但很可能get_option(\'gmt_offset\')
设置时间get_option(\'timezone_string\')
不是。
date_default_timezone_set(get_option(\'timezone_string\'));
这样做的缺点是,WordPress在创建mysql时间戳时假设PHP设置为UTC,因此每当您切换时区时,您都可能会把数据库弄得一团糟!更不用说其他WP插件可能会假设PHP环境始终处于UTC。因此,如果您只需要一个正确的时间,可以使用以下命令强制时间戳为UTC:
get_post_time(\'c\', true); //should work for non-post objects.
不幸的是,虽然正确,但它会将时区设置为UTC。注意你不能both 使用“true”标志and 默认的timezone\\u set函数。
任何合适的解决方案都将是一段代码片段,可以解释这两者gmt_offset
和timezone_string
并使用它们在某些输入上设置时区。WP假设PHP在处理mysql时间戳时设置为UTC,这可能会破坏其他插件。
有一个这样的解决方案https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ 但是,这也是一个BUG,因此您应该使用get_post_time($date_format, TRUE)
获取实际正确的时间戳的代码。
Like Rarst said, 但要获得实际字符串,请使用getName DateTimeZone的方法。
wp_timezone()->getName()
wp_date(\'T\')
我一直在尝试使用Autofocus theme 在不同的主题中,通过复制粘贴索引中的代码。php中的自动聚焦主题到我的新归档文件中。php文件。我还从函数中复制了相关函数。php从Autofocus开始,我还尝试将一些css转换到新主题。我已经尝试了很长一段时间,并多次调整,但我无法让它工作。我同时获得图像和文本,但与自动对焦主题中的样式不同,而且绝对不会在前屏幕上使用自动对焦的裁剪。我错过什么了吗?如果我把所有的功能都抄了,难道不行吗。将php导入到新的中并复制所有css?