(WooCommerce)如何让用户属于一个订单?

时间:2014-03-16 作者:Nazeem

我正在创建一个函数,该函数需要在WooCommerce内完成订单后调用。为此,我使用了*\'woocommerce\\u order\\u status\\u completed\'*挂钩。我想检查订单中是否有属于特定产品类别的产品。如果是这种情况,用户将被添加到Wordpress内的组中。为了处理组逻辑,我正在使用另一个插件的API。此方法需要*group\\u id*和*user\\u id*。我唯一缺少的是获取*user\\u id*。

How can I get the user (in detail: the id), from my WooCommerce Order?

代码:

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

1 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

__get() 中的方法WC_Order 你可以看到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;
我想你不会允许客人结账,但如果没有用户id,你可能需要某种回退。

Update for WooCommerce 3.0

忽略以上所有内容。正如评论中所指出的,有一些直接的方法可以获得这些信息。事实上,几乎所有的“神奇方法”都已被删除,直接访问对象属性将引发PHP警告。

$order = wc_get_order( $order_id );
$user = $order->get_user();
$user_id = $order->get_user_id();

结束

相关推荐