wp_is_valid_utf8未定义 - WordPress 6.9.1
我最近在本地机器上手动更新我的WordPress网站,结果因为一个未定义函数错误而崩溃。我检查了 wp-includes 目录下的 utf8.php,确实定义了新的函数 wp_is_valid_utf8。它依赖mbstring的启用,因此我检查过,该模块已启用。我使用的是带Apache的 PHP 8.2。
我多次删除了整个 wp-includes 和 wp-admin 文件夹,并重新复制新副本,未做任何改动。不幸的是,我没有足够新的备份来在这里回滚。
请查看下面的完整错误信息(为保护隐私,某些路径已隐藏):
致命错误:未捕获的错误:调用未定义的函数
wp_is_valid_utf8(),出现在 /(sites folder)/wp-includes/formatting.php第 2287行 堆栈跟踪:0 /(sites folder)/wp-includes/class-wp-taxonomy.php(378): sanitize_title_with_dashes('category_name')
1 /(sites folder)/wp-includes/class-wp-taxonomy.php(290): WP_Taxonomy->set_props('post', Array)
2 /(sites folder)/wp-includes/taxonomy.php(532): WP_Taxonomy->__construct('category', 'post', Array)
3 /(sites folder)/wp-includes/taxonomy.php(63): register_taxonomy('category', 'post', Array)
4 /(sites folder)/wp-settings.php(513): create_initial_taxonomies()
5 /(sites folder)/wp-config.php(129): require_once('/(user folder)...')
6 /(sites folder)/wp-load.php(50): require_once('/(user folder)...')
7 /(sites folder)/wp-blog-header.php(13): require_once('/(user folder)...')
8 /(sites folder)/index.php(17): require('/(user folder)...')
9 {main} thrown in /(sites folder)/wp-includes/formatting.php on line 2287
解决方案
此错误通常发生在WordPress核心文件来自不同版本时混用。即使 utf8.php 中存在 wp_is_valid_utf8(),但在 formatting.php 调用它之前,定义它的文件可能没有被加载。
这通常发生在某些文件来自较新版本的WordPress,其他文件来自较旧版本,或者发生了不完整的手动更新。
wp_is_valid_utf8() 是在WordPress 6.5中引入的,因此如果 formatting.php 期望它,但加载顺序或其他核心文件较旧,就会出现正是这样的错误。
请进行一次完整的WordPress核心替换,除了你的内容和配置。
从官方网站下载WordPress的最新版,上传新的副本,并且仅复制 wp-admin 和 wp-includes,然后替换根目录的核心文件
index.php
wp-activate.php
wp-blog-header.php
wp-comments-post.php
wp-config-sample.php
wp-cron.php
wp-links-opml.php
wp-load.php
wp-login.php
wp-mail.php
wp-settings.php
wp-signup.php
wp-trackback.php
xmlrpc.php
但不要替换
wp-config.php
wp-content/
.htaccess
如果 wp-settings.php 过时,可能会以不同的顺序加载文件,导致在需要时 wp_is_valid_utf8() 从未被定义。
如果仍然发生,那么OPCache可能在缓存旧文件,或者有一个插件非常早地加载并包含了旧的formatting文件,或者上传的文件损坏,或者同一目录中混合了多个WordPress安装。