WordPress 环境更新到 PHP 8 后,主题 create_function() 报错怎么办?

在部署阿里云服务器的 LNMP 环境时,PHP 的版本用的是 8.0 版,完成 WordPress 网站迁移 后,打开网站首页时,报告主题有错误。

“PHP 致命错误:未捕获错误:调用…wp-content/themes/nana/inc/widgets.php:109中未定义的函数create_function()”

查询原始代码为:
add_action( 'widgets_init', create_function( '', 'return register_widget( "Scenery_Widget_Profile" );' ) );
我这个主题用了多年了,作者后来一直没更新,我理解可能是 create_function() 在PHP8中被弃用了。

如何解决它与 PHP8 的兼容情况?万能的互联网告诉我,可以用一个函数替换代码的 create_function() 部分。

add_action( 'widgets_init', function(){

return register_widget( "scenery_widget_profile" );

});

原来从 PHP 7.2 开始,create_function()函数被认为是过时的,出于安全原因,应该避免使用,建议改用匿名闭包。

但我发现主题中还有许多其他的函数错误,就考虑能否把 PHP 的版本降低为原来的 7.4 版本。

发现宝塔面板是支持“切换PHP版本”的,我们可以安装多个PHP版本,然后通过修改当前站点,指定运行的 PHP 版本。

安装 PHP 7.4 版本

点击“软件商店”,应用搜索“PHP”,选择版本“php-7.4”,点击“极速安装”,即可安装。

选择合适 PHP 版本

点击“网站”,点击列表中网站对应的 PHP 栏目的 8.0 链接,选择 PHP 版本,下拉框中选择“PHP-74”即可。

切换为 PHP 7.4 版本后,网站打开正常。

如果我们在云服务器上安装另外的网站,则可根据主题的情况,选择更高的 PHP 版本,对于网站的安全还是更有保障一些,因为一般来说,官方弃用的函数,多数是有安全漏洞,或容易被恶意使用的。


历史上的今天:

相关推荐

宝塔面板 Let’s Encrypt 证书到期如何续签?

3月份,在阿里云推出“99计划”助力无忧上云时,我入手了这款云服务器,安装的是宝塔面板,部署 SSL 时,也是直接申请的 Let's Encrypt 免费证书。 当时选择 DNS 接口时,因为阿里云DNS 方式需要设置对应接口的API,所以采用了手动解析。到6月14日,网站打不开了,提示证书到期,我登录宝塔面板,点击“续签证书”,但失败了 ...

WordPress 网站迁移后内容页出现404错误的修复方法

部署好服务器环境后,我将一个 WordPress 网站迁移到了上面,迁移完成后,后台登录正常,网站首页访问也正常,就是文章页等页面全部404错误。 常规解决方法 登录后台 - 设置 - 固定连接,不作任何修改,点击“保存”按钮。很多情况下,是可以通过这个方法解决内页404错误的,但是本次我的错误没有能用这种方法解决。 检查 ...

玩转云服务器(3):搭建一个 WordPress 网站

当完成安装宝塔面板,第一次登录到宝塔后台,会弹出推荐安装套件的选择,安装服务器的应用环境,它是一组通常一起使用来运行动态网站或者服务器的自由软件,包括操作系统,网页服务器,数据库管理系统,脚本语言等。 没有特别需求的话,我们选择宝塔推荐的 LNMP 套件,它对 WordPress 网站程序的安装比较友好。 安装方式 ...

玩转云服务器(2):安装宝塔面板

购入阿里云服务器,完成付款后,系统会为你创建云服务器 ECS 实例, 接下来就是登录 ECS 控制台进行管理。 点击实例右侧的“远程连接”按钮,选择“通过Workbench远程连接”,这里要注意的一点是,第一次登录实例,用户名为:root,密码需点击下方的“重置密码”来设定。 登录我的实例后,我们就可以安装当前最流行的服务器管 ...

2 条评论

  1. 得换主题咯

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。