成功付款后 woocommerce_thankyou 挂钩不起作用
Posted
技术标签:
【中文标题】成功付款后 woocommerce_thankyou 挂钩不起作用【英文标题】:woocommerce_thankyou hook is not working after successful payment 【发布时间】:2017-10-10 10:42:02 【问题描述】:我正在为 woocommerce 创建支付网关,但我遇到了一个问题,即在成功支付后我重定向到感谢页面并且我的订单状态没有更新为“处理中”或“已完成”。
我在我的插件主文件中使用了 woocommerce_thankyou 钩子。
add_action( 'woocommerce_thankyou_epg', 'my_change_status_function', 10, 1 );
function my_change_status_function( $order_id )
$order = new WC_Order( $order_id );
$order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );
其实在这个函数更新状态之前我想发送一个API调用来检查支付状态,然后根据响应我想更新订单状态。
谁能帮我解决这个问题。
【问题讨论】:
【参考方案1】:把钩子改成:
add_action( 'woocommerce_thankyou', 'my_change_status_function', 20, 1 );
function my_change_status_function( $order_id )
$order = new WC_Order( $order_id );
$order_pay_method = get_post_meta( $order->id, '_payment_method', true );
if($order_pay_method == 'epg')
$order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );
修正了钩子。
【讨论】:
我认为 woocommerce_thankyou_$payment_method 和 woocommerce_thankyou 挂钩是相同的,只是第一个挂钩适用于特定的付款方式。我都试过了,但都没有。【参考方案2】:add_action( 'woocommerce_thankyou', 'my_change_status_function', 10, 1 );
function my_change_status_function( $order_id )
$order = new WC_Order( $order_id );
$order->update_status( 'processing', __( 'Payment received.', 'wc-gateway-offline' ) );
【讨论】:
我认为 woocommerce_thankyou_$payment_method 和 woocommerce_thankyou 挂钩是相同的,除了第一个挂钩适用于特定的付款方式。我都试过了,但都没有。 @Max 你是否覆盖了模板文件? 不,我没有覆盖任何文件。只需将此代码放在我的插件主文件中即可。 你能在你的 woocommerce/templates/checkout/thankyou.php 中签入吗 do_action('woocommerce_thankyou', $order->id );在那里放一个骰子,检查执行是否到达那里! 是的,我检查了,不幸的是,执行没有到达钩子,因为 $order_id 没有进入感谢页面,所以如果条件为假。仍在寻找为什么 order_id 没有出现在感谢页面。以上是关于成功付款后 woocommerce_thankyou 挂钩不起作用的主要内容,如果未能解决你的问题,请参考以下文章