WP站长应该大部分都遇到过WP用户注册时数据库记录的用户注册时间跟实际时间不一致一般要相差8个小时,这个问题一直都没有什么修正的插件或者代码,或许这是WP程序在国内运行的一个BUG,为什么这么说呢,请看我们下面的解析最后会附上处理方法和所需代码。

wordpress时区问题代码片段
wordpress时区问题代码片段

问题解析

要分析这个问题当然要开始分析WP程序的源代码,我们找到用户注册时负责写入数据库的函数wp_insert_user()在这个函数中生成用户注册时间字段是用的gmdate( ‘Y-m-d H:i:s’ )函数(代码片段见上方截图),并不是我们熟知的date函数,这两个函数的区别就是gmdate函数是直接调用的UTC国际时区进行时间生成,date是根据环境时区进行时间生成,现在明白问题在哪里了吧,就是因为gmdate调用的是UTC时区,该时区跟国内的时间相差8个小时左右,所以国内的所有WordPress网站记录的用户注册时间都会差上8个小时,而国外的用户则基本不会收到影响。所以上面我才说这可能是国内的一个bug,那么这个时间错误有什么影响呢?

错误的影响

第一,无法准确记录用户的注册时间,如果您的网站没有前端用户页面并且没有进入数据库查看的话或许没有什么影响,但是如果前端页面有显示用户的注册时间,那么就会发现这个时间不准确对用户的误导还是很大的,特别是新注册的用户。

第二,无法进行精准统计,如果您想统计每天网站的注册人数,那么要令您失望了,因为记录的源信息错误您无法实现精准的日注册人数的统计分析,您一直用的都是错误的数据。

问题修复代码

对于WP程序修改程序源代码肯定是非常不明智的,官方提供了大量的过滤器方便我们对程序进行修改,下面我们就使用wp_pre_insert_user_data这个过滤器对这个问题进行修复,下面是修复代码,大家可以复制之后放置到主题的functions.php文件中。

/** 修复注册时区问题  */
add_filter('wp_pre_insert_user_data', 'xhtheme_registeredDate', 10,2); 
public function xhtheme_registeredDate($data,$update){
   if( !$update ){
        $data['user_registered'] = date('Y-m-d H:i:s');
   }
   return $data;
}

上面的代码我们使用date函数重写了user_registered字段,那么数据库保存的时候就是正确的时间,到此这个问题我们已经完美修复了这个问题!

Meteor主题高级版已内置该修复项,无需再次添加该代码,查看Meteor主题

-- END --

延伸阅读

  • 免费网站统计工具:百度统计、51la与Umami那个更好用

    发布在 WordPress视界 栏目

    互联网经过长时间的沉淀和快速的迭代过程中,有什么好用的免费工具转入了收费,或者沉积同时又有一些新的工具应运而生,今天就来分析一下当前国内互联网中比较好用的网站统计工具,当然内容主要以免费为主并且以国内使用为定位,所以想CNZZ已转入收费的平...

  • 为何选择WordPress:从功能到优势深度解析

    发布在 WordPress视界 栏目

    在这个数字化时代,网站已经成为企业、个人和自由职业者展示自身形象、传递信息、开展业务的重要窗口。而WordPress,这个全球最受欢迎的开源内容管理系统(CMS),凭借其出色的功能、易用性和灵活性,赢得了无数网站开发者和运营者的青睐。作为一...

  • WordPress安全指南:七大关键措施保障网站安全

    发布在 WordPress视界 栏目

    随着WordPress的用户基数不断扩大,网络安全问题也随之变得日益复杂。在2024年,确保网站的安全已成为每个站长的首要任务。无论是流量较小的博客,还是拥有大量用户的商业站点,都需要针对不同规模的威胁采取合适的安全措施。以下是七个重要的W...