升级PHP 8.1后WordPress出现stripos()弃用错误,求解决方案
解决WordPress升级PHP 8.1后stripos()弃用错误
问题原因
PHP 8.1开始严格要求stripos()函数的第一个参数($haystack)必须是字符串类型,当前wp_add_inline_style函数未对传入的$data参数做非空校验,当$data为null时就会触发该弃用警告。
解决办法
方法1:升级WordPress到最新版本
WordPress官方已在后续版本修复了这类PHP 8.x兼容性问题,直接升级到最新稳定版是最稳妥的方案,既能解决该错误,也能同步获得安全补丁与功能更新。
方法2:临时修改函数代码(不推荐长期使用)
若暂时无法升级WordPress,可修改/public_html/wp-includes/functions.wp-styles.php中的wp_add_inline_style函数,在调用stripos前添加对$data的非空处理:
function wp_add_inline_style( $handle, $data ) { _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); // 新增:将null转为空字符串,避免stripos参数类型错误 if ( is_null( $data ) ) { $data = ''; } if ( false !== stripos( $data, '</style>' ) ) { _doing_it_wrong( __FUNCTION__, sprintf( /* translators: 1: <style>, 2: wp_add_inline_style() */ __( 'Do not pass %1$s tags to %2$s.' ), '<code>&lt;style&gt;</code>', '<code>wp_add_inline_style()</code>' ), '3.7.0' ); $data = trim( preg_replace( '#<style[^>]*>(.*)</style>#is', '$1', $data ) ); } return wp_styles()->add_inline_style( $handle, $data ); }
方法3:排查主题/插件的违规调用
该错误也可能由主题或插件调用wp_add_inline_style时传入null值导致,可通过以下步骤定位问题:
- 临时切换到WordPress默认主题(如Twenty Twenty-Four),若错误消失,说明是当前主题的问题,可联系主题开发者修复,或自行修改主题中调用
wp_add_inline_style的代码,确保传入的$data为字符串类型。 - 逐个禁用插件,找到引发错误的插件后,联系开发者修复或修改插件内的对应调用代码。
内容的提问来源于stack exchange,提问作者Sourav Pan
相关产品推荐
相关产品推荐

