修改WooCommerce发送给PayPal的custom_id字段无效问题
解决WooCommerce PayPal回调custom_id修改无效的问题
别直接改核心文件
直接编辑class-wc-gateway-paypal-request.php是不靠谱的——WooCommerce一更新,你的修改就会被覆盖,而且官方网关的内部逻辑可能会自动重置你手动添加的字段,导致设置无效。
正确操作:用官方钩子修改
WooCommerce提供了专门的过滤器来调整PayPal请求参数,完全不用碰核心文件:
1. 添加自定义代码
把下面的代码放到主题的functions.php里,或者自己建个简单的自定义插件:
add_filter( 'woocommerce_paypal_args', 'custom_set_paypal_custom_id', 10, 2 ); function custom_set_paypal_custom_id( $args, $order ) { // 这里替换成你想要的custom_id内容,比如用户ID+订单号组合 $custom_value = 'uid_' . $order->get_user_id() . '_oid_' . $order->get_id(); // 更新custom字段(兼容旧版网关) $args['custom'] = $custom_value; // 更新custom_id字段(REST API网关专用) if ( isset( $args['custom_id'] ) ) { $args['custom_id'] = $custom_value; } return $args; }
2. 为什么之前的修改无效?
- WooCommerce的PayPal网关在请求发送前,可能会通过内部逻辑强制把
custom_id设为订单号,覆盖你手动加的内容 - 核心文件修改属于非规范操作,插件更新会直接清除你的改动
3. 测试验证
- 先清空WooCommerce缓存,确保钩子生效
- 用PayPal沙箱环境测试支付回调,查看返回的
resource.custom_id是否变成了你设置的值
内容的提问来源于stack exchange,提问作者Михаил Рябиков
相关产品推荐
相关产品推荐

