WooCommerce PHP8切换订单状态报id直接访问错误排查
问题现象
PHP8环境部署的WooCommerce站点,执行订单状态变更操作时固定触发如下错误:
id was called incorrectly. Order properties should not be accessed directly. Backtrace: do_action('wp_ajax_wc_sa_mark_order_status'), WP_Hook->do_action, WP_Hook->apply_filters, WC_SA_AJAX::mark_order_status, WC_Order->update_status, WC_Order->save, WC_Order->status_transition, do_action('woocommerce_order_status_sent'), WP_Hook->do_action, WP_Hook->apply_filters, WC_Emails::send_transactional_email, do_action_ref_array('woocommerce_order_status_sent_notification'), WP_Hook->do_action, WP_Hook->apply_filters, WC_SA_Email->trigger, WC_Email->get_headers, apply_filters('woocommerce_email_headers'), WP_Hook->apply_filters, WCJ_Product_By_User->sendemail_to_productowner_order_place_successfully, WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong. This message was added in version 3.0.
错误根源判断
这个错误是WooCommerce 3.0版本后加入的规范提示,核心原因是代码没有遵循WooCommerce数据对象访问规则,直接读取订单对象属性,没有通过官方封装的Getter方法取值,PHP8环境下对这类不规范调用的校验更严格,所以会固定弹出提示。
排查回溯栈不用从头捋调用链路,直接找wc_doing_it_wrong之前最近的业务回调即可:
- 整个触发链路是:WC_SA自定义订单状态插件发起AJAX改状态请求→订单状态更新落库→触发对应状态的通知邮件发送→拼接邮件头时加载
woocommerce_email_headers过滤器挂载的所有回调 - 报错的直接来源是Booster for WooCommerce(简称WCJ)插件的「产品按用户归属」模块,对应类
WCJ_Product_By_User下的sendemail_to_productowner_order_place_successfully方法内部存在$order->id这类直接访问属性的写法,触发了WooCommerce的合规校验。 - 链路中前面的WC_SA自定义状态插件、WooCommerce核心邮件逻辑都是正常流程,不是问题来源,不用做无效排查。
排查修复步骤
- 定位验证:临时禁用WCJ插件的「Product By User/产品归属用户」模块,再次修改订单状态,如果错误不再弹出,即可确认定位准确。
- 代码修正:
- 找到WCJ插件中
WCJ_Product_By_User类对应的文件,定位到sendemail_to_productowner_order_place_successfully方法 - 把方法内所有通过
$order->xxx格式直接访问订单属性的代码,全部替换为WooCommerce官方提供的Getter方法,常见替换对应关系如下:$order->id替换为$order->get_id()$order->billing_email替换为$order->get_billing_email()$order->total替换为$order->get_total()$order->status替换为$order->get_status()$order->customer_id替换为$order->get_customer_id()
- 找到WCJ插件中
- 临时兼容:如果暂时没法改插件代码,可以在站点根目录的
wp-config.php文件中关闭调试模式,把WP_DEBUG常量设置为false,就能屏蔽前端弹出的错误提示。注意这只是临时方案,建议把兼容问题反馈给WCJ插件作者,或者自行修正代码,避免后续版本升级出现更严重的兼容故障。
内容的提问来源于stack exchange,提问作者DarkAllMan
相关产品推荐
相关产品推荐

