如果用户购买特定产品,则将先前订单的订单状态更改为“已取消”

时间:2018-10-18 10:54:28

标签: php wordpress woocommerce hook-woocommerce orders

如果用户购买特定产品(产品ID的数组),我想将订单状态更改为已取消,以取消较早的购买

我正在使用自定义功能get_order_ids_from_bought_items() from this answer thread,该功能允许我获取与给定产品ID相匹配的特定客户的订单ID。

// The defined product IDs
product_ids = array(183,153);

$linked_order_ids = get_order_ids_from_bought_items(product_ids); //output : array(12,13);

如果客户购买了其中任何一种产品===> $special products = array(1788,123);

  

我想将$linked_order_ids的状态更改为已取消

由于get_order_ids_from_bought_items()也将获得最后的订单,因此我正在使用array_pop($linked_order_ids );从该函数的输出中删除最后一项

完整代码

add_action('woocommerce_order_status_changed', 'woo_order_status_change_custom', 10, 3);
function changestatus()
{
    $product_ids = $newcustomer->wpprolister_array_intersect();

    $orderidstoremove = get_order_ids_from_bought_items($product_ids );
    $removed          = array_pop($orderidstoremove);

    foreach ($removed as $remove) {
        $order = wc_get_order( $remove );
        $order->update_status('cancelled', 'As you have brought new package this package has been cancelled');
    }

}

但是不能正常工作。

1 个答案:

答案 0 :(得分:1)

使用此挂钩时,您不能使用当前用户ID ,而需要从WC_Order对象中检索用户ID ...然后{ {1}}无法正常工作。

您将必须更改所有相关的现有功能代码,才能处理已定义的用户ID

此外,函数的名称与钩住的回调段(在$newcustomer->wpprolister_array_intersect()中)不匹配

因此您的代码必须类似于:

add_action()