(ওহোকমার্স) কীভাবে অর্ডারভুক্ত ব্যবহারকারীকে পাবেন? [বন্ধ]


23

আমি একটি ফাংশন তৈরি করছি যা WooCommerce এর মধ্যে অর্ডার সম্পন্ন হওয়ার পরে কল করা দরকার। এর জন্য আমি * 'woocommerce_order_status_completed' * হুক ব্যবহার করছি। অর্ডারের কোনও নির্দিষ্ট পণ্য বিভাগের সাথে সম্পর্কিত পণ্য রয়েছে কিনা তা আমি খতিয়ে দেখতে চাই। যদি এটি হয় তবে ব্যবহারকারীকে ওয়ার্ডপ্রেসের মধ্যে একটি গোষ্ঠীতে যুক্ত করা হবে। গোষ্ঠী যুক্তি পরিচালনা করতে, আমি অন্য প্লাগইনের এপিআই ব্যবহার করছি। এই পদ্ধতিতে * গ্রুপ_আইডি * এবং * ব্যবহারকারী_আইডি * প্রয়োজন। আমি কেবল মিস করছি তা হচ্ছে * ব্যবহারকারী_আইডি *।

আমার 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 এর জন্য আপডেট

উপরোক্ত সকলকে উপেক্ষা করুন। মন্তব্যে নির্দেশিত হিসাবে এই তথ্য পাওয়ার জন্য প্রত্যক্ষ পদ্ধতি রয়েছে। আসলে, প্রায় সমস্ত "যাদু পদ্ধতি" সরানো হয়েছে এবং সরাসরি অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করা পিএইচপি সতর্কতা নিক্ষেপ করবে।

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

7
ডাব্লুউউকমার্স WC_Orderক্লাসটি আসে get_user()যার সাথে ব্যবহারকারীর অবজেক্টটি বা falseঅতিথিদের জন্য ফিরে আসে এবং get_user_id()যা ব্যবহারকারীর আইডি বা অতিথিদের জন্য শূন্য ফিরিয়ে দেয় ... আপনি যদি আর সেগুলি ব্যবহার করছেন তবে কোনও কলব্যাক সম্পর্কে আপনার আর চিন্তা করার দরকার নেই।
নাবিল কাদিমি

1
get_user_id- তে অতিথির অর্ডার যখন 0 এ ফিরে আসবে তখন সাবধান হন
ভিনসেন্ট গেস্নে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.