woocommerce_order_status_changed hook:获得新旧状态?

时间:2017-09-07 07:19:15

标签: wordpress woocommerce hook-woocommerce

如何使用WooCommerce挂钩获取订单的旧状态和新状态:woocommerce_order_status_changed

这是我的代码,但只填充$order_id ..

add_action('woocommerce_order_status_changed','woo_order_status_change_custom');
function woo_order_status_change_custom($order_id,$old_status,$new_status) {
//order ID is filled
//old_status and new_status never
//tested by logging the parameters
}

现在我可以使用此代码轻松获取新状态:

 $order = new WC_Order( $order_id );
$orderstatus = $order->status;

但是,如果$old_status为空,我怎样才能获得之前的订单状态?

3 个答案:

答案 0 :(得分:6)

我正在寻找wc hooks并找到了这篇文章。未设置参数的原因是您在add_action函数中缺少参数。此功能默认只有一个参数。要使用这三个:

add_action('woocommerce_order_status_changed', 'woo_order_status_change_custom', 10, 3);

10是Wordpress中操作的默认顺序,最后一个参数是Wordpress应传递给自定义操作的参数数量。

答案 1 :(得分:2)

因为您在add_action调用结束时未添加NUMBER个参数。这是正确的行:

add_action('woocommerce_order_status_changed','woo_order_status_change_custom', 10, 3);

“10,3”表示“我希望3个参数将被发送到我的回调函数”。默认情况下,只会发送一个参数(order_id)。

答案 2 :(得分:1)

试试这段代码。据我说,它应该根据你的意见工作。

add_action( 'save_post', 'wpse63478_save' );
function wpse63478_save() {

 if(!current_user_can('manage_options'))
   return false;
 if(!is_admin())
    return false;
 if($_REQUEST['post_type'] != 'shop_order')
    return false;
 if($_REQUEST['post_ID']!='')
 {
    $orderId = $_REQUEST['post_ID'];
    $order = new WC_Order( $orderId );
    $currentStatus = $order->status;
    $requestedStautus = $_REQUEST['order_status'];
    if ( $requestedStautus== 'on-hold' and $currentStatus == 'completed') {
        //Do your work here
    }
 }
}