将用户 ID 分配给在 Woocommerce 3 中以编程方式创建的订单
Assign the user ID to an order created programmatically in Woocommerce 3
我正在使用 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->orders 下)但看不到是谁订购的,用户根本看不到他的订单。
我已经将网站上传到一个临时域,所以你们可以看到:https://360transformations.000webhostapp.com/?page_id=446
Woocommerce link 通过 post 的元数据向用户下订单。当下新订单时,woocommerce 会创建一个新的 post。并将 _customer_user
元键设置为下订单的用户 ID。因此,如果您想 link 与其他用户下订单;假设用户 B 的用户 ID 为 20。然后只需将 _customer_user
的元值更新为特定订单的 20 (post).
此外,还有其他元键可以从 wooocommerce 获取名字、姓氏和其他信息。您可能还需要根据新用户信息更新这些元值。
因此,只需更新元值即可。
Check the below image
woocommerce - Post meta key that is responsible to link an order to the user.
可能重复:
您必须使用 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 );
将用户 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);
你可以做到这一点https://developer.wordpress.org/reference/functions/wp_set_current_user/
并且 customer_id 将由 woocommerce 自动设置。
我正在使用 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->orders 下)但看不到是谁订购的,用户根本看不到他的订单。
我已经将网站上传到一个临时域,所以你们可以看到:https://360transformations.000webhostapp.com/?page_id=446
Woocommerce link 通过 post 的元数据向用户下订单。当下新订单时,woocommerce 会创建一个新的 post。并将 _customer_user
元键设置为下订单的用户 ID。因此,如果您想 link 与其他用户下订单;假设用户 B 的用户 ID 为 20。然后只需将 _customer_user
的元值更新为特定订单的 20 (post).
此外,还有其他元键可以从 wooocommerce 获取名字、姓氏和其他信息。您可能还需要根据新用户信息更新这些元值。
因此,只需更新元值即可。
Check the below image
woocommerce - Post meta key that is responsible to link an order to the user.
可能重复:
您必须使用 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 );
将用户 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);
你可以做到这一点https://developer.wordpress.org/reference/functions/wp_set_current_user/
并且 customer_id 将由 woocommerce 自动设置。