WordPress支付钩子对WP Crowdfunding产品不生效如何解决
解决方案
问题原因
WP Crowdfunding插件自定义了众筹项目的支付链路,未完全触发WooCommerce原生的woocommerce_payment_complete钩子,因此原有代码无法捕获众筹订单的支付数据。
修复方案
- 方案1:使用WP Crowdfunding专属支付成功钩子(优先选择)
插件官方提供了支付完成后的专属触发钩子,直接替换原有钩子即可,适配性最高:
add_action('wpneo_crowdfunding_after_backer_payment_received', 'capture_donation_for_custom_donation_view', 10, 1); function capture_donation_for_custom_donation_view($order_id){ if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); // 原有后续业务逻辑保持不变 }
- 方案2:使用WooCommerce通用订单状态钩子(兼容多版本插件)
如果上述专属钩子不匹配你使用的插件版本,可以使用WooCommerce原生的订单状态变更钩子,同时增加众筹商品类型判断,避免误处理普通订单:
add_action('woocommerce_order_status_completed', 'capture_crowdfunding_donation', 10, 1); function capture_crowdfunding_donation($order_id){ if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $is_crowdfunding_order = false; // 遍历订单商品判断是否为众筹类型 foreach ($order->get_items() as $item) { $product = $item->get_product(); if ($product->get_type() === 'crowdfunding') { $is_crowdfunding_order = true; break; } } if (!$is_crowdfunding_order) { return; } // 此处编写众筹订单数据捕获的业务逻辑 }
注意事项
- 原有代码中的
global $product声明无实际作用,订单处理场景下需要从订单商品项中获取对应产品对象,不要依赖全局产品变量 - 测试时建议创建小额测试众筹订单,验证钩子触发和数据捕获逻辑是否正常
内容的提问来源于stack exchange,提问作者Susheel
相关产品推荐
相关产品推荐

