問題描述

我正在做一個功能,需要在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。