问题描述
我正在做一个功能,需要在 WooCommerce 完成订单后调用。为此,我使用*’woocommerce_order_status_completed’*钩子。我想检查订单是否具有属于特定产品类别的产品。如果是这种情况,用户将被添加到 Wordpress 中的一个组。要处理组逻辑,我正在使用另一个插件的 API 。此方法需要* group_id *和* user_id *。我唯一缺少的是获取* user_id *。
如何从我的 WooCommerce 订单获取用户 (详细:id)?
码:
function isa_set_isa_member_group_after_order_completed($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach($items as $item) {
$product = $order->get_product_from_item($item);
$has_membership_product = has_term('Lidmaatschap','product_cat',$product->post);
if($has_membership_product) {
break;
}
}
$group = Groups_Group::read_by_name('ISA Leden');
if(!group) {
return; // TODO: Add error message + email?
}
$user_id = 0 // TODO: Get user id from order.
$user_group = array(
"user_id" => $user_id,
"group_id" => $group->group_id
);
$result = Groups_User_Group::create($user_group);
if(!result) {
return; // TODO: Add error message + email?
}
}
技术细节:
WordPress 版本:3.8
WooCommerce 版本:2.1
最佳解决方案
从 WC_Order
类中的__get()
方法可以看出,user_id
属性取自/存储为_customer_user
后期元,用于所讨论的顺序。
/**
* __get function.
*
* @access public
* @param mixed $key
* @return mixed
*/
public function __get( $key ) {
// Get values or default if not set
if ( 'completed_date' == $key ) {
$value = ( $value = get_post_meta( $this->id, '_completed_date', true ) ) ? $value : $this->modified_date;
} elseif ( 'user_id' == $key ) {
$value = ( $value = get_post_meta( $this->id, '_customer_user', true ) ) ? absint( $value ) : '';
} else {
$value = get_post_meta( $this->id, '_' . $key, true );
}
return $value;
}
所以在您的代码中,您可以如下获取用户 ID:
$order = new WC_Order( $order_id );
$user_id = $order->user_id;
我认为你不会允许客人结帐,但是如果没有用户标识,你可能会想要一些回退。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。