坑爹玩意,很久没更新博客,今天连更了两篇博客,莫名其妙就遇到提示“此站点遇到了致命错误”。
又要开始折腾排查……
开启 WP Debug 模式
打开 WordPress 根目录文件 wp-config.php,将 define( 'WP_DEBUG', false );
这一行修改为如下:
// 开启WP_DEBUG模式
define( 'WP_DEBUG', true);
// 显示错误信息
define( 'WP_DEBUG_DISPLAY', true);
@ini_set( 'display_errors', 'On');
定位到插件问题
刷新博客首页提示:
Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the backup-backup domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /模糊敏感内容/wp-includes/functions.php on line 6114
网上搜了一下,发现是 WordPress 6.7 版本后引入的一个坑爹功能,参考网址:php - Notice: Function _load_textdomain_just_in_time was called incorrectly - Stack Overflow
一开始我以为是 WordPress 主题 Sakurairo 的问题,因为我切换其他主题后没有报错,可正常使用,一直在这个主题上找问题,按照网上说的内容无法解决。
然后我注意到错误提示中的 Translation loading for the backup-backup domain was triggered too early。按照网上说的,这个 backup-backup 指的就是这个插件或主题的问题,这是一个备份插件。我看了一下,确实这个插件已经几个月都没有更新,没有对最新的 WordPress 版本做兼容性测试。
于是我把这个插件禁用,这下首页没有错误提示了,但照样是显示异常。
定位到主题问题
接着继续排查,把一些插件也禁用,并没有解决问题,我想最根本的问题应该不是这个插件的问题,可能主题有问题,甚至想到这个开源主题的 Github 中提个 Issues……
但我对 PHP 不太熟,万一搞错了也不太好意思。
测试了几个页面,博客文章、标签页面、分类页面等均正常,唯一打开时光轴页面出现报错:
Fatal error: Uncaught TypeError: number_format(): Argument #1 ($num) must be of type float, string given in /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/functions.php:592 Stack trace: #0 /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/functions.php(592): number_format() #1 /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/functions.php(637): restyle_text() #2 /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/functions.php(1578): get_post_views() #3 /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/user/page-timeline.php(19): memory_archives_list() #4 /模糊敏感内容/wp-includes/template-loader.php(106): include('…') #5 /模糊敏感内容/wp-blog-header.php(19): require_once('…') #6 /模糊敏感内容/index.php(17): require('…') #7 {main} thrown in /模糊敏感内容/wp-content/themes/Sakurairo-2.6.3.1/functions.php on line 592
按道理来说我的主题已经更新到最新 2.7.2 版本了,难道是自带的更新没更新完全?我在官方项目的 Issues 里面都没找到有类似的问题。于是手动到 Github 下载最新版本,做了手动更新。
结果依然报这个错误。
错误出现在 functions.php 的代码块:
function restyle_text($number)
{
switch (iro_opt('statistics_format')) {
case "type_2": //23,333 次访问
return number_format($number);
case "type_3": //23 333 次访问
return number_format($number, 0, '.', ' ');
case "type_4": //23k 次访问
if ($number >= 1000) {
return round($number / 1000, 2) . 'k';
}
return $number;
default:
return $number;
}
}
看起来是数字类型有问题,尝试改成如下:
function restyle_text($number) {
// Debugging: 输出 $number 和它的类型 (仅用于开发环境)
// error_log("Number is: " . print_r($number, true) . " and its type is: " . gettype($number));
// 确保 $number 是一个有效的数字
if (!is_numeric($number)) {
// 如果不是一个有效的数字,设定默认值
return '0';
}
// 获取统计格式选项并检查是否为空或无效
$format = iro_opt('statistics_format');
if (empty($format)) {
$format = 'default'; // 设定默认值
}
// 强制将 $number 转换为浮点数
$number = (float)$number;
switch ($format) {
case "type_2": // 23,333 次访问
return number_format($number);
case "type_3": // 23 333 次访问
return number_format($number, 0, '.', ' ');
case "type_4": // 23k 次访问
if ($number >= 1000) {
return round($number / 1000, 2) . 'k';
}
return number_format($number); // 确保这里也使用 number_format 格式化
default:
return number_format($number); // 默认情况下也进行格式化
}
}
刷新页面,完全正常,首页也可以正常显示了。
秉承能跑就行的优良习惯,懒得再去细究对错,个人猜测应该是 WordPress 新版本的新特性导致的,之前之所以没有出现问题,我估计是因为我的缓存插件……缓存还没过期,所以一直访问都正常,一更新缓存就嗝屁了。
关闭 DEBUG 模式
将代码改回:
define( 'WP_DEBUG', false);
关闭 WordPress DEBUG模式,打完收工。
Comments NOTHING