首页 > 解决方案 > Woocommerce 以编程方式创建订单不起作用

问题描述

我正在尝试以编程方式创建 woocommerce 订单。它适用于登录用户,但是当我尝试使用访客帐户创建它时,它不起作用。这是我的代码

$cart = WC()->cart;
$order_data = array(
              'status' => apply_filters('woocommerce_default_order_status', 'pending'),
              'customer_id' => get_current_user_id()
            );
            $checkout = WC()->checkout();
            $order_id = $checkout->create_order($order_data);
            $order = wc_get_order( $order_id );
            update_post_meta($order_id, '_customer_user', get_current_user_id());
            $order->calculate_totals();

请帮助解决这个问题。

非常感谢

标签: wordpresswoocommerce

解决方案


问题是 get_current_user_id() 如果找不到用户则返回 0。当您将 0 作为 customer_id 传入时,它会破坏创建顺序。

尝试:

$user_id = get_current_user_id();
if($user_id != 0){
    $order_data = array(
        'status' => apply_filters('woocommerce_default_order_status', 'pending'),
        'customer_id' => get_current_user_id()
     );
} else {
    $order_data = array(
        'status' => apply_filters('woocommerce_default_order_status', 'pending')
    );
}

然后创建您的订单。


推荐阅读