WordPress 3.5版本已经正式推出,带来了一系列重要的更新。这个版本引入了全新的响应式布局默认主题Twenty Twelve;对后台Admin界面进行了改版,使其更加简洁,并对移动设备进行了优化;同时,Media功能也得到了显著增强,使得WordPress成为图床服务的有力竞争者。
然而,正如WordPress一贯的风格,这个版本也悄然改变了一些内部方法。现在,`wpdb::prepare()`函数必须包含第二个参数,否则会抛出错误。从技术角度来看,WordPress这样的修改是合理的,因为`prepare`方法用于构建SQL语句,理论上需要一个带变量的字符串作为第一个参数,以及一个作为变量的第二个参数,以防止SQL注入等安全问题。但WordPress从2.2甚至更早的版本开始,就允许忽略第二个参数,现在突然将其设为必填,这无疑会导致许多主题和插件无法正常工作。
我发布的所有WordPress主题和最新评论插件WP-RecentComments都受到了影响。感谢neoner的提醒,我已经在半个月前更新了WP-RecentComments来解决这个问题,但还没有时间更新主题,因为主题审核过程相当繁琐。
解决方案:在更新主题之前,我先在这里分享解决方案,以便用户可以自行解决,相信其他主题或插件也可能会遇到类似问题,希望这些信息对大家有所帮助。
首先,我们需要定位出现问题的文件和代码。PHP的错误报告非常精确,打开错误报告中提到的文件(不是`wp-db.php`),找到`$wpdb->prepare`的代码。为该方法添加一个空字符串作为第二个参数,例如:将`$wpdb->prepare(‘xxx’);`改为`$wpdb->prepare(‘xxx’, ”);`即可。
总结:WordPress已经不是第一次悄悄改变方法调用方式了。在WordPress 2.7版本中,也要求`comments_template`必须输入第二个参数,但当时是为了扩展功能。这次我真的感到困惑。除了安全考虑,WordPress可能也在有意淘汰一些不积极更新的主题。我的主题在向后兼容性方面做得很好,这样的改变实在是不太合理。
WordPress 3.5更新:新特性与内部方法变更的影响
@版权声明:
本网站所展示的图片均来源于互联网,我们致力于尊重原创作者的版权。若图片涉及版权问题,或图片所有者不希望图片被展示,请与我们联系,我们将在第一时间进行处理,包括但不限于删除图片。我们对图片的版权问题持开放态度,并愿意与版权所有者进行沟通协商。感谢您的理解与支持。