(Woocommerce) उपयोगकर्ता को ऑर्डर से संबंधित कैसे प्राप्त करें? [बन्द है]


23

मैं एक फ़ंक्शन बना रहा हूं जिसे WooCommerce के भीतर एक ऑर्डर पूरा होने के बाद बुलाया जाना चाहिए। इसके लिए मैं * 'woocommerce_order_status_completed' * हुक का उपयोग कर रहा हूं। मैं जांच करना चाहता हूं कि क्या ऑर्डर में किसी विशिष्ट उत्पाद श्रेणी से संबंधित उत्पाद है। यदि यह मामला है, तो उपयोगकर्ता को Wordpress के भीतर एक समूह में जोड़ा जाएगा। समूह तर्क को संभालने के लिए, मैं दूसरे प्लगइन के एपीआई का उपयोग कर रहा हूं। इस विधि को * group_id * और * user_id * की आवश्यकता है। केवल एक चीज जो मुझे याद आ रही है वह है * user_id *।

मैं अपने WooCommerce ऑर्डर से उपयोगकर्ता (विस्तार से: आईडी) कैसे प्राप्त कर सकता हूं?

कोड:

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

तो अपने कोड में आप उपयोगकर्ता आईडी को इस तरह से पकड़ सकते हैं:

$order = new WC_Order( $order_id );
$user_id = $order->user_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()देता है और जो मेहमानों के लिए उपयोगकर्ता आईडी या शून्य देता है ... यदि आप उन का उपयोग कर रहे हैं तो आपको कॉलबैक के बारे में चिंता करने की आवश्यकता नहीं है।
नबील कदीमी 16

1
खबरदार जब get_user_id पर अतिथि से संबंधित आदेश 0 वापस आ जाएगा
विन्सेन्ट Guesné
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.