(Woocommerce) 주문에 속하는 사용자를 얻는 방법? [닫은]


23

WooCommerce 내에서 주문이 완료된 후 호출 해야하는 기능을 만들고 있습니다. 이를 위해 * 'woocommerce_order_status_completed'* 후크를 사용하고 있습니다. 주문에 특정 제품 카테고리에 속하는 제품이 있는지 확인하고 싶습니다. 이 경우 사용자는 Wordpress 내의 그룹에 추가됩니다. 그룹 로직을 처리하기 위해 다른 플러그인의 API를 사용하고 있습니다. 이 메소드에는 * group_id * 및 * user_id *가 필요합니다. 내가 놓친 유일한 것은 * user_id *를 얻는 것입니다.

WooCommerce Order에서 사용자 (자세한 정보 : 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?
    }

}

기술적 세부 사항:

워드 프레스 버전 : 3.8

WooCommerce 버전 : 2.1

답변:


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;
}

따라서 코드에서 다음과 같이 사용자 ID를 가져올 수 있습니다.

$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 또는 0을 손님에게 반환합니다. 더 이상 콜백에 대해 걱정할 필요가 없습니다.
Nabil Kadimi

1
get_user_id에서 손님에게 속한 주문이 0을 반환 할 때주의하십시오
Mepps
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.