WooCommerce中woocommerce_review_order_after_payment钩子不触发问题
问题原因
你对woocommerce_review_order_after_payment钩子的触发场景理解错误,该钩子是结账页面加载渲染订单摘要区块时的前端展示类钩子,仅在用户访问结账页、页面渲染到支付选项下方的位置时触发,不会在提交支付表单、下单、支付完成这些后端操作节点触发,所以你提交表单时看不到触发属于正常情况。
同时该钩子默认无传入参数,你注册钩子时设置的接收3个参数也不符合该钩子的默认规范,不过这不是你无法触发钩子的核心原因。
解决方案
如果需要在用户下单/支付完成节点获取订单ID,根据你的业务需求选择对应钩子即可:
- 若要在用户提交订单、订单创建成功后立即触发:使用
woocommerce_checkout_order_created钩子,该钩子会传入刚创建的$order对象,可直接调用$order->get_id()获取订单ID - 若要在用户支付完成后触发:使用
woocommerce_payment_complete钩子,该钩子直接传入$order_id参数 - 若要在订单状态变更为已支付时触发:根据需求选择
woocommerce_order_status_completed或woocommerce_order_status_processing钩子
以下是修改后的参考代码:
class MyShortcode { /** * Register services and applications */ public function register() { add_shortcode('myshortcode', [$this, 'basket']); add_action('wp_enqueue_scripts', [$this, 'activitiesEnqueueStyles']); // 替换为支付完成触发的钩子,接收1个参数 add_action('woocommerce_payment_complete', [$this, 'handle_after_payment'], 10, 1); } /** * Enqueue styles and scripts */ public function activitiesEnqueueStyles() { wp_enqueue_style('basket', $this->plugin_url . 'assets/lib/basket.min.css'); } // 支付完成后的回调方法,直接接收订单ID public function handle_after_payment( $order_id ) { var_dump('here'); var_dump($order_id); exit; } }
补充说明
所有WooCommerce订单相关的后端钩子无需额外配置,只要注册时的优先级、参数数量和回调函数的参数对应即可正常触发,测试时建议先用日志写入代替var_dump+exit的写法,避免打断正常支付流程,方便排查问题。
内容的提问来源于stack exchange,提问作者the_lorem_ipsum_guy
相关产品推荐
相关产品推荐

