WooCommerce获取选中配送方式报错:Call to a member function get() on null
解决WooCommerce支付网关控制函数的E_ERROR错误
错误原因
报错Uncaught Error: Call to a member function get() on null的核心原因有两个:
- 后台引导任务触发该函数时,WooCommerce会话对象(
WC()->session)未初始化,直接调用get()方法导致空指针错误; - 即使会话存在,若用户未选择任何配送方式,
chosen_shipping_methods会是空数组,直接取索引[0]会引发数组越界问题。
修复后的代码
add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_cash_on_delivery' ); function payment_gateway_cash_on_delivery( $available_gateways ) { // 排除后台环境,仅在前端结账流程执行逻辑 if ( is_admin() || ! WC()->session ) { return $available_gateways; } $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' ); // 检查是否有选中的配送方式 if ( empty( $chosen_shipping_methods ) ) { return $available_gateways; } $selected_shipping_id = $chosen_shipping_methods[0]; if ( in_array( $selected_shipping_id, ['flexible_shipping_5_5', 'flexible_shipping_7_6'] ) && isset( $available_gateways['bacs'] ) ) { unset( $available_gateways['bacs'] ); } return $available_gateways; }
关键修复点
- 后台环境过滤:通过
is_admin()判断,避免后台任务触发时执行不需要的逻辑; - 会话存在性检查:确保
WC()->session对象初始化后再调用get()方法; - 配送方式空值判断:先检查
chosen_shipping_methods数组是否非空,再获取第一个元素,避免索引错误。
内容的提问来源于stack exchange,提问作者Tomas Dockal
相关产品推荐
相关产品推荐

