(Woocommerce) Kullanıcının bir siparişe ait olması nasıl sağlanır? [kapalı]


23

WooCommerce'da bir sipariş tamamlandıktan sonra çağrılması gereken bir işlev yapıyorum. Bunun için * 'woocommerce_order_status_completed' * hook kullanıyorum. Siparişin belirli bir ürün kategorisine ait bir ürünü olup olmadığını kontrol etmek istiyorum. Bu durumda, kullanıcı Wordpress içindeki bir gruba eklenecektir. Grup mantığını ele almak için başka bir eklentinin API'sini kullanıyorum. Bu yöntem * group_id * ve * user_id * işlevine ihtiyaç duyar. Kaçırdığım tek şey * user_id * almak.

WooCommerce Siparişimden kullanıcıyı (ayrıntılı olarak: kimliği) nasıl alabilirim?

kod:

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

}

Teknik detaylar:

WordPress sürümü: 3.8

WooCommerce sürümü: 2.1

Yanıtlar:


33

Gönderen __get()içinde yönteme WC_Ordersınıfının bunu görebilirsiniz user_idözellik / alınan olarak depolanır _customer_user, söz konusu sipariş için yazılan meta.

/**
 * __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;
}

Yani kodunuzdaki gibi kullanıcı kimliğini alabilirsiniz:

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

Konukların ödemelerine izin vermeyeceğinizi sanıyorum, ancak kullanıcı kimliği olmasa bile bir tür geri dönüş isteyebilirsiniz.

WooCommerce 3.0 Güncellemesi

Yukarıdakilerin hepsini dikkate almayın. Yorumlarda belirtildiği gibi, bu bilgiyi elde etmek için doğrudan yöntemler vardır. Aslında, neredeyse tüm "sihirli yöntemler" kaldırıldı ve doğrudan nesne özelliklerine erişerek PHP uyarıları atacak.

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

7
WooCommerce WC_Ordersınıfı get_user(), kullanıcı nesnesini döndüren veya falsekonuklar için gelen ve misafirler get_user_id()için kullanıcı kimliğini veya sıfırı döndüren gelir ... Bunları kullanıyorsanız artık bir geri arama için endişelenmenize gerek yoktur.
Nabil Kadimi

1
get_user_id'de misafirlere ait siparişler, 0
Mpps
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.