(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?
    }

}

技術的な詳細:

WordPressバージョン: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またはゼロをゲストに返します...これらを使用している場合、コールバックを心配する必要はありません。
ナビルカディミ

1
get_user_idのゲストに属する注文が0を返す場合は注意してください
Mepps
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.