You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移WordPress站点后遇wp_kses调用错误及数据库认证问题求助

问题根源及解决方案

一、PHP 8.0下wp_kses_allowed_html错误的根源

  1. PHP版本严格性差异:PHP 8.0对全局变量的初始化检查比PHP 7.3更严格。你的站点代码(可能是主题、自定义插件或mu-plugin)中使用了CUSTOM_TAGS常量扩展WP的HTML标签白名单,但未正确初始化$allowedposttags、$allowedtags、$allowedentitynames、$allowedxmlentitynames这四个全局数组。PHP 7.3中未初始化的全局变量会被默认当作空数组处理,不会触发WP的错误检测;但PHP 8.0下未初始化变量会被识别为null,触发WP的_doing_it_wrong错误提示。
  2. 过时的自定义代码:部分旧代码仍在使用WP早期的CUSTOM_TAGS常量方式修改允许的HTML标签,这种方式在高版本PHP+WP组合中已不被推荐,WP官方更建议使用过滤器钩子实现。

二、PHP 8.0下错误的解决步骤

  • 定位问题代码:
    • 检查主题的functions.php文件、所有自定义插件、wp-content/mu-plugins目录下的文件,以及wp-config.php中是否存在定义CUSTOM_TAGS的代码,或者直接调用wp_kses_allowed_html的逻辑。
    • 如果禁用插件和主题后错误仍存在,重点排查mu-plugin或wp-config.php中的自定义代码,甚至数据库中主题/插件选项里存储的PHP代码片段。
  • 初始化全局数组:
    在调用wp_kses_allowed_html或定义CUSTOM_TAGS的代码前,添加全局变量初始化逻辑:
    global $allowedposttags, $allowedtags, $allowedentitynames, $allowedxmlentitynames;
    // 确保变量为数组类型,避免null触发错误
    $allowedposttags = is_array($allowedposttags) ? $allowedposttags : [];
    $allowedtags = is_array($allowedtags) ? $allowedtags : [];
    $allowedentitynames = is_array($allowedentitynames) ? $allowedentitynames : [];
    $allowedxmlentitynames = is_array($allowedxmlentitynames) ? $allowedxmlentitynames : [];
    
  • 替换为推荐的过滤器方式:
    放弃使用CUSTOM_TAGS常量,改用WP官方推荐的wp_kses_allowed_html过滤器添加自定义标签,示例代码:
    add_filter('wp_kses_allowed_html', 'custom_whitelist_tags', 10, 2);
    function custom_whitelist_tags($allowed_tags, $context) {
        // 根据上下文添加自定义标签,比如针对文章内容的自定义标签
        if ($context === 'post') {
            $allowed_tags['my-custom-tag'] = [
                'data-id' => [],
                'class' => []
            ];
        }
        return $allowed_tags;
    }
    

三、PHP 7.3下数据库认证错误的根源及解决

根源

新服务器的PHP 7.3环境使用的MySQL驱动(如mysqli)与旧服务器存在差异,且数据库用户可能使用了PHP 7.3不支持的认证插件(如caching_sha2_password),导致连接失败。

解决步骤

  • 修改数据库用户认证方式:
    登录MySQL数据库,执行以下SQL语句,将用户认证方式切换为PHP 7.3支持的mysql_native_password:
    -- 替换为你的数据库用户名和主机(通常是localhost或%)
    ALTER USER 'wp_db_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的数据库密码';
    FLUSH PRIVILEGES;
    
  • 检查PHP扩展配置:
    确保PHP 7.3的php.ini文件中启用了mysqli或pdo_mysql扩展(旧的mysql扩展已废弃),取消相关扩展行的注释:
    extension=mysqli
    extension=pdo_mysql
    
  • 调整wp-config.php配置:
    将DB_HOST从localhost改为127.0.0.1,避免本地套接字连接的兼容性问题:
    define('DB_HOST', '127.0.0.1');
    

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:42:45