将用户ID分配给在Woocommerce 3中以编程方式创建的订单

时间:2018-05-17 02:37:25

标签: php wordpress woocommerce orders

我正在使用Woocommerce在Wordpress上管理我的产品,但是用户通过第三方服务付费。

我正在尝试手动创建新订单,将其分配给当前用户。订单确实已创建并记录,但以下代码仅记录项目和时间,没有详细信息用户:

  global $woocommerce;

  $address = array(
      'first_name' => $_GET['FirstName'],
      'last_name'  => $_GET['LastName'],
      'company'    => $_GET['CompanyName'],
      'email'      => $_GET['EmailAddress'],
      'phone'      => $_GET['MobilePhoneNumber'],
      'address_1'  => '',
      'address_2'  => '',
      'city'       => '',
      'state'      => '',
      'postcode'   => '',
      'country'    => $_GET['countryCode']
  );

  $order = wc_create_order();

  foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
            $item_id = $order->add_product(
                    $values['data'], $values['quantity'], array(
                'variation' => $values['variation'],
                'totals' => array(
                    'subtotal' => $values['line_subtotal'],
                    'subtotal_tax' => $values['line_subtotal_tax'],
                    'total' => $values['line_total'],
                    'tax' => $values['line_tax'],
                    'tax_data' => $values['line_tax_data'] // Since 2.2
                )
                    )
            );
        }
  $order->set_address( $address, 'billing' );
  //
  $order->calculate_totals();
  $order->update_status("Completed", 'Imported order', TRUE);  
$order->save();

管理员可以看到订购的内容(在woocommerce->订单下),但不是由谁,用户根本看不到他的订单。

我已将网站上传到临时域名,以便您可以看到:https://360transformations.000webhostapp.com/?page_id=446

4 个答案:

答案 0 :(得分:2)

您必须使用set_customer_id() CRUD setter方法添加客户ID:

$order->set_customer_id( $user_id );

$user_id应该是当前用户ID或已定义的用户ID ...对于访客用户,此ID将为0。要获取当前用户ID,您将使用:

$user_id = get_current_user_id();
$order->set_customer_id( $user_id );

答案 1 :(得分:2)

将用户ID分配给订单,使用以下选项

选项1:

$userid = get_current_user_id();
$order = wc_create_order(array('customer_id'=>$userid));

选项2:

在wc_create_order()函数

之后添加以下代码
$userid = get_current_user_id();
update_post_meta($order->id, '_customer_user', $userid);

答案 2 :(得分:0)

Woocommerce通过帖子的元数据与用户链接订单。当下新订单时,woocommerce会创建一个新帖子。并将_customer_user元键设置为下订单的用户ID。因此,如果您想要与其他用户链接订单;说具有用户ID 20的用户B的实例。然后只需将_customer_user的元值更新为特定订单的20(post)。

此外,还有其他元键从wooocommerce获取名字,姓氏和其他信息。您可能还需要根据新用户信息更新这些元值。

所以,只需更新元值,就可以了。

  

检查下图

woocommerce - Post meta key that is responsible to link an order to the user.

可能重复:

Programmatically creating new order in Woocommerce

答案 3 :(得分:0)

您可以https://developer.wordpress.org/reference/functions/wp_set_current_user/

和customer_id将由woocommerce自动设置。