Site icon Hip-Hop Website Design and Development

Woocommerce custom add to cart with unique id

I tried to ask this one stackoverflow.com to no avail so I hope someone will be able to help me here:

I am not that proficient at coding so please bear with me.

I have this custom add to cart code:

    $data = self::get_calc_data($uid);

    foreach ($data as $calc_id => $calc_data) {
        $product_id = isset($calc_data['woo_info']['product_id']) ? $calc_data['woo_info']['product_id'] : null;
        if ( $product_id && intval($product_id) === intval($params['woo_info']['product_id']) ) {
            $meta = [
                'product_id' => $product_id,
                'item_name'  => isset($calc_data['item_name']) ? $calc_data['item_name'] : '',
            ];

            if(!empty($calc_data['descriptions']) && is_array($calc_data['descriptions'])) {
                foreach ($calc_data['descriptions'] as $calc_item) {

                    if ( $calc_item['hidden'] === true ){
                        continue;
                    }

                    if ( strpos($calc_item['alias'], 'datePicker_field_id_') !== false ) {

                        $val = $calc_item['converted'] ? ' ('. $calc_item['converted'] . ') ' . $calc_item['value'] : $calc_item['value'];
                    }else{

                        $labels = isset($calc_item['extra']) ? $calc_item['extra']: '';
                        if ( (strpos($calc_item['alias'], 'radio_field_id_') !== false
                              || strpos($calc_item['alias'], 'dropDown_field_id_') !== false)
                             && key_exists('options', $calc_item) ) {
                            $labels = CCBWooCheckout::getLabels($calc_item['options']);
                        }

                        if ( strpos($calc_item['alias'], 'multi_range_field_id_') !== false
                             && key_exists('options', $calc_item) && count($calc_item['options']) > 0 ) {
                            $labels = key_exists('label', $calc_item['options'][0]) ?
                                $calc_item['options'][0]['label']: '';
                        }

                        $val = isset($labels) ? $labels . ' ' . $calc_item['converted'] : $calc_item['converted'];
                    }

                    $meta['calc_data'][$calc_item['label']] = $val;
                }
            }
            /** add totals data */
            if( !empty($calc_data['ccb_total_and_label']) && is_array($calc_data['ccb_total_and_label']) ) {
                $meta['ccb_total'] = $calc_data['ccb_total_and_label']['total'];
            }
            WC()->cart->add_to_cart($product_id, 1, '', array(), array('ccb_calculator' => $meta));
        }
    }
} 

I am not that proficient at coding so please bear with me.

I have this custom add to cart code:

 public static function add_to_cart( $params, $uid ) {
    $data = self::get_calc_data($uid);

    foreach ($data as $calc_id => $calc_data) {
        $product_id = isset($calc_data['woo_info']['product_id']) ? $calc_data['woo_info']['product_id'] : null;
        if ( $product_id && intval($product_id) === intval($params['woo_info']['product_id']) ) {
            $meta = [
                'product_id' => $product_id,
                'item_name'  => isset($calc_data['item_name']) ? $calc_data['item_name'] : '',
            ];

            if(!empty($calc_data['descriptions']) && is_array($calc_data['descriptions'])) {
                foreach ($calc_data['descriptions'] as $calc_item) {

                    if ( $calc_item['hidden'] === true ){
                        continue;
                    }

                    if ( strpos($calc_item['alias'], 'datePicker_field_id_') !== false ) {

                        $val = $calc_item['converted'] ? ' ('. $calc_item['converted'] . ') ' . $calc_item['value'] : $calc_item['value'];
                    }else{

                        $labels = isset($calc_item['extra']) ? $calc_item['extra']: '';
                        if ( (strpos($calc_item['alias'], 'radio_field_id_') !== false
                              || strpos($calc_item['alias'], 'dropDown_field_id_') !== false)
                             && key_exists('options', $calc_item) ) {
                            $labels = CCBWooCheckout::getLabels($calc_item['options']);
                        }

                        if ( strpos($calc_item['alias'], 'multi_range_field_id_') !== false
                             && key_exists('options', $calc_item) && count($calc_item['options']) > 0 ) {
                            $labels = key_exists('label', $calc_item['options'][0]) ?
                                $calc_item['options'][0]['label']: '';
                        }

                        $val = isset($labels) ? $labels . ' ' . $calc_item['converted'] : $calc_item['converted'];
                    }

                    $meta['calc_data'][$calc_item['label']] = $val;
                }
            }
            /** add totals data */
            if( !empty($calc_data['ccb_total_and_label']) && is_array($calc_data['ccb_total_and_label']) ) {
                $meta['ccb_total'] = $calc_data['ccb_total_and_label']['total'];
            }
            WC()->cart->add_to_cart($product_id, 1, '', array(), array('ccb_calculator' => $meta));
        }
    }
} 

It adds a simple item from a plugin into Woocommerce Cart. I am trying to add a unique ID for every added item so that I can add multiples of the same item and they would show as unique items in the cart.

I was trying to create the unique ID with this function:


  $unique_cart_item_key = md5( microtime().rand() );
  $cart_item_data['unique_key'] = $unique_cart_item_key;

  return $cart_item_data;

}

Then I added the filter to the add_to_cart function

add_filter( 'woocommerce_add_cart_item_data','force_individual_cart_items', 10, 2 );

But this is where I am completely lost. I tried to add

'specialid' => $cart_item_data,

to $meta in hopes of using all the meta to create a unique key but only a strange version of the base product is added. And again only one time.

What am I doing wrong?

Appreciate all (and any of) your help!