php WooCommerce订单状态挂钩未触发

r1zhe5dt  于 2023-11-16  发布在  PHP
关注(0)|答案(2)|浏览(135)

我使用以下函数来检测订单是否设置为待定。这发生在付款页面和付款提供商通知之间:

add_action( 'woocommerce_order_status_pending', 'status_pending' );
function status_pending( $related_job ) {
    error_log('Triggered');
}

字符串
问题是,我没有得到任何错误日志,这表明我的功能工作。但它变得疯狂。当我通过 Jmeter 板更新状态从完成到待定,日志出现。所以我绝对不知道为什么它在结帐过程中不工作。任何建议或想法可能是什么问题?

ebdffaop

ebdffaop1#

“待定”订单状态是客户在创建订单后进入支付网关之前的默认订单状态。
因此,最好的方法是在订单创建后,在付款方式处理之前使用钩子:
1)首先尝试woocommerce_checkout_order_processed操作钩子 (3个参数)

add_action( 'woocommerce_checkout_order_processed', 'order_processed_with_pending_status', 10, 3 );
function order_processed_with_pending_status( $order_id, $posted_data, $order ) {
    error_log('Triggered');
}

字符串
2)或者尝试woocommerce_checkout_update_order_meta action hook (2 args)

add_action( 'woocommerce_checkout_update_order_meta', 'order_processed_with_pending_status', 10, 2 );
function order_processed_with_pending_status( $order_id, $data ) {
    error_log('Triggered');
}


两者都应该工作…

dphi5xsq

dphi5xsq2#

这是因为钩子只在订单状态更改时触发,而不是在订单创建时触发,还有另一个钩子可以用来检测新订单,您可以使用订单ID来获取订单对象,您可以使用它来查找订单状态:

add_action( 'woocommerce_new_order', 'prefix_new_wc_order',  1, 1  );
function prefix_new_wc_order( $order_id ) {
    $order = new WC_Order( $order_id );

}

字符串
上面的钩子只在结账过程中触发,所以在后台创建订单不会触发它。

相关问题