PHP致命错误:调用非对象上的成员函数Locale()

时间:2017-08-10 作者:Mithun Nath

这一切都是在我更新Wordpress站点中的一些插件之后开始的。

现在,当我尝试访问WordPress仪表板时,遇到Http内部500错误。

文件管理器中的错误日志文件出错。

PHP Fatal error:  Call to a member function locale() on a non-object in /wp-content/themes/my_theme/lib/custom.php at line 25.
我的习惯。php文件如下所示。

24. global $sitepress;
25. setlocale(LC_TIME, $sitepress->locale() . \'.UTF-8\');
26. $_SESSION[\'date_format\'] = (ICL_LANGUAGE_CODE == \'fr\') ? \'le %e %B %G\' : \'%B %e, %G\';
对这个问题有什么建议!!

2 个回复
SO网友:Chris Cox

$sitepress 是WPML IIRC的全局集。将第25行更改如下:

if(isset($sitepress) && is_object($sitepress)) {
  setlocale(LC_TIME, $sitepress->locale() . \'.UTF-8\');
}
作为一般规则,您不应该在主题中假设插件中包含或设置的任何内容都可用,因为可以在主题仍处于活动状态时禁用插件。在尝试从主题中的插件访问变量、类或函数之前,请始终包括某种健全性检查。

编辑:根据您发现使用的方法已被弃用的情况,我建议您对更新的文件执行以下操作:

if(isset($sitepress) && method_exists($sitepress, \'get_locale\')) {
  setlocale(LC_TIME, $sitepress->get_locale(ICL_LANGUAGE_CODE) . \'.UTF-8\');
}

SO网友:Mithun Nath

这解决了问题!

$sitepress->locale()函数在新版本的wpml插件中不再可用。因此,WPML插件的新更新破坏了翻译功能。

global $sitepress;
setlocale(LC_TIME, $sitepress->get_locale(ICL_LANGUAGE_CODE) . \'.UTF-8\');
$_SESSION[\'date_format\'] = (ICL_LANGUAGE_CODE == \'fr\') ? \'le %e %B %G\' : \'%B %e, %G\';

结束