猿问

WooCommerce 订单状态挂钩未触发

我在这里使用这个小函数来检测订单是否设置为待处理。这发生在支付页面和支付提供商通知之间:


add_action( 'woocommerce_order_status_pending', 'status_pending' );

function status_pending( $related_job ) {

    error_log('Triggered');

}

问题是我没有收到任何显示该功能有效的错误日志。但它变得更加疯狂。当我通过仪表板将状态从已完成更新为待处理时,会出现日志。所以我完全不知道为什么它在结帐过程中不起作用。任何建议或想法可能是什么问题?


Smart猫小萌
浏览 204回答 2
2回答

潇潇雨雨

“待处理”订单状态是客户进入支付网关之前订单的默认状态,就在订单创建之后。因此,最好的方法是在创建订单后,在付款方式流程之前使用挂钩: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动作钩子(2个参数):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');}两者都应该工作......

LEATH

这是因为钩子仅在订单状态更改时触发,而不是在订单创建时触发,还有另一个钩子可用于检测新订单,您可以使用订单 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 );}上面的钩子只在结账过程中触发,所以在后端创建订单不会触发它。
随时随地看视频慕课网APP
我要回答