WooCommerce中指定配送方式ID下强制要求订单备注字段
解决WooCommerce特定Shipmondo配送方式强制订单备注必填的问题
问题根源:原代码通过
explode(':', $chosen_shipping)拆分配送方式ID后,错误地将拆分后的第一个元素(shipmondo)和完整标识shipmondo:26做对比,逻辑不成立,导致无法精准匹配ID为26的Shipmondo配送方式。修正后的代码:
add_action( 'woocommerce_checkout_process', 'danskefragtmand_order_comment_validation', 20 ); function danskefragtmand_order_comment_validation() { // 获取选中的配送方式 $chosen_shipping = WC()->session->get( 'chosen_shipping_methods' )[0]; // 拆分配送方式标识,分离前缀和ID $shipping_parts = explode(':', $chosen_shipping); // 精准匹配Shipmondo且ID为26的配送方式,同时检查订单备注是否为空 if ( isset($shipping_parts[0], $shipping_parts[1]) && $shipping_parts[0] === 'shipmondo' && $shipping_parts[1] === '26' && empty($_POST['order_comments']) ) { wc_add_notice( __( "请告知快递员,若配送时您不在家,包裹可以放置的位置。", "woocommerce" ), 'error' ); } }
代码说明:
- 保留拆分逻辑,但调整判断条件:验证拆分后的第一个元素为
shipmondo,第二个元素为26,实现精准匹配目标配送方式。 - 增加
isset检查,避免因配送方式格式异常导致的报错。 - 提示文案适配中文场景,若需英文可换回原内容。
- 保留拆分逻辑,但调整判断条件:验证拆分后的第一个元素为
额外验证建议:
可临时添加日志输出,确认实际选中的配送方式标识格式,确保匹配逻辑准确:// 在函数开头添加,测试时使用,之后可删除 error_log( '选中的配送方式: ' . WC()->session->get( 'chosen_shipping_methods' )[0] );查看网站错误日志,确认
shipmondo:26为实际有效的配送方式标识格式。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

