如何使用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
为空,我怎样才能获得之前的订单状态?
答案 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
}
}
}