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

将插件从PHP7.4升级到PHP8.2时遇字符串与整数相乘类型错误求助

PHP8.2迁移中WordPress插件的TypeError解决建议

错误详情

Fatal error: Uncaught TypeError: Unsupported operand types: string * int in /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/book-a-room/bookaroom-meetings-public.php:127 Stack trace: #0 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/book-a-room/bookaroom-meetings-public.php(91): bookaroom_public::showForm_checkHoursError() #1 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/shortcodes.php(433): bookaroom_public::mainForm() #2 [internal function]: do_shortcode_tag() #3 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/shortcodes.php(273): preg_replace_callback() #4 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/widgets/shortcode.php(130): do_shortcode() #5 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/controls-stack.php(2297): Elementor\Widget_Shortcode->render() #6 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/widget-base.php(614): Elementor\Controls_Stack->render_by_mode() #7 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/widget-base.php(755): Elementor\Widget_Base->render_content() #8 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/element-base.php(464): Elementor\Widget_Base->print_content() #9 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/element-base.php(1375): Elementor\Element_Base->print_element() #10 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/element-base.php(464): Elementor\Element_Base->print_content() #11 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/element-base.php(1375): Elementor\Element_Base->print_element() #12 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/base/element-base.php(464): Elementor\Element_Base->print_content() #13 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/core/base/document.php(1749): Elementor\Element_Base->print_element() #14 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/core/base/document.php(1144): Elementor\Core\Base\Document->print_elements() #15 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/frontend.php(1179): Elementor\Core\Base\Document->print_elements_with_wrapper() #16 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/includes/frontend.php(1074): Elementor\Frontend->get_builder_content() #17 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/class-wp-hook.php(324): Elementor\Frontend->apply_builder_in_content() #18 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/plugin.php(205): WP_Hook->apply_filters() #19 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/post-template.php(256): apply_filters() #20 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/modules/page-templates/module.php(190): the_content() #21 [internal function]: Elementor\Modules\PageTemplates\Module->print_callback() #22 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/modules/page-templates/module.php(207): call_user_func() #23 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/elementor/modules/page-templates/templates/header-footer.php(19): Elementor\Modules\PageTemplates\Module->print_content() #24 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-includes/template-loader.php(106): include('/home/851390.cl...') #25 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-blog-header.php(19): require_once('/home/851390.cl...') #26 /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/index.php(17): require('/home/851390.cl...') #27 {main} thrown in /home/851390.cloudwaysapps.com/ctbcfdcbzf/public_html/wp-content/plugins/book-a-room/bookaroom-meetings-public.php on line 127

问题代码(第127行)

$validStart     = strtotime( date( 'Y-m-d' ) ) + ( get_option( 'bookaroom_reserveBuffer' ) * 24 * 60 * 60 );

问题分析

错误提示Unsupported operand types: string * int,说明get_option('bookaroom_reserveBuffer')返回的是字符串类型,PHP8.0+提升了类型严格性,不再自动将字符串隐式转换为数字运算。若之前的类型转换尝试无效,大概率是未覆盖选项不存在、返回非有效值的场景。

解决方案

方案1:强制转换+默认值兜底

$reserveBuffer = get_option( 'bookaroom_reserveBuffer' );
// 仅当值为有效数字时转换为整数,否则设为0
$reserveBufferInt = is_numeric($reserveBuffer) ? (int)$reserveBuffer : 0;
$validStart = strtotime(date('Y-m-d')) + ($reserveBufferInt * 24 * 60 * 60);

方案2:使用WordPress原生函数(推荐)

WordPress提供的absint()函数可安全将值转为非负整数,同时处理非数字、false等异常情况:

// 给get_option设置默认值0,再用absint确保为整数
$reserveBuffer = absint(get_option('bookaroom_reserveBuffer', 0));
$validStart = strtotime(date('Y-m-d')) + ($reserveBuffer * 24 * 60 * 60);

方案3:简化时间计算(可选优化)

用strtotime直接计算天数,避免手动换算秒数:

$reserveBuffer = absint(get_option('bookaroom_reserveBuffer', 0));
$validStart = strtotime("today + {$reserveBuffer} days");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:17:17