(Woocommerce)如何使用户属于订单?[关闭]


23

我正在做一个在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

Answers:


33

从类中的__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;
}

因此,在您的代码中,您可以像这样获取用户标识:

$order = new WC_Order( $order_id );
$user_id = $order->user_id;

我认为您将不允许访客结帐,但如果没有用户ID,您可能需要某种后备。

WooCommerce 3.0的更新

忽略以上所有内容。正如评论中指出的那样,有直接方法可以获取此信息。实际上,几乎所有“魔术方法”都已被删除,直接访问对象属性将引发PHP警告。

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

7
WooCommerce WC_Order类附带了该类,该类get_user()返回用户对象或false来宾,get_user_id()并且返回来宾的用户ID或零...如果您正在使用这些,则不再需要担心回调。
Nabil Kadimi 2015年

1
当心get_user_id上属于访客的订单将返回0
Mepps
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.