add_meta_data( self::$cart_item_option_items_key, $cart_item[self::$cart_item_option_items_key] ); } if (isset($cart_item[self::$cart_item_option_parent_key])) { $order_item->add_meta_data( self::$cart_item_option_parent_key, $cart_item[self::$cart_item_option_parent_key], true ); } } public static function hidden_order_item_meta( $hidden ) { return array_merge( $hidden, array( self::$cart_item_option_items_key, self::$cart_item_option_parent_key, ) ); } public static function set_package_option_groups($package, $groups_data) { $package->update_meta_data( self::$package_option_groups_meta_key, $groups_data ); $package->save_meta_data(); } public static function add_cart_item_data($cart_item_data, $package_id) { // If cart item that will be added is actually requested package if ($_POST['package_id'] = $package_id) { // Prepare additional data for later use. if ( ! isset( $cart_item_data[self::$cart_item_option_items_key] ) ) { $cart_item_data[self::$cart_item_option_items_key ] = array(); } } return $cart_item_data; } public static function add_options_to_cart($cart_item_key, $package_id, $quantity, $variation_id, $variation, $cart_item_data) { $is_option_parent = $_POST['package_id'] = $package_id && isset($cart_item_data[self::$cart_item_option_items_key]); $has_selected_options = isset($_POST['options']) && is_array($_POST['options']); if ($is_option_parent && $has_selected_options) { self::_remove_options_hooks(); $options_ids = $_POST['options']; foreach ($options_ids as $option_id) { $option_package = wc_get_product($option_id); if (is_object($option_package)) { $option_cart_item_key = WC()->cart->add_to_cart($option_id); if ($option_cart_item_key) { WC()->cart->cart_contents[$option_cart_item_key][self::$cart_item_option_parent_key] = $cart_item_key; WC()->cart->cart_contents[ $cart_item_key ][self::$cart_item_option_items_key][] = $option_cart_item_key; } } } self::_add_options_hooks(); } } public static function get_cart_item_options($cart_item) { $option_cart_items = array(); if (isset($cart_item[self::$cart_item_option_items_key])) { $option_cart_items_ids = $cart_item[self::$cart_item_option_items_key]; foreach ($option_cart_items_ids as $option_cart_item_id) { $option_cart_item = WC()->cart->get_cart_item($option_cart_item_id); if (isset($option_cart_item)) { $option_cart_items[] = $option_cart_item; } } } return $option_cart_items; } public static function get_order_item_options($order_items, $parent_order_item) { $option_order_items = array(); if (isset($parent_order_item['wiaas_option_items']) && isset($parent_order_item['bundle_cart_key'])) { foreach ($order_items as $order_item) { if (isset($order_item['bundle_cart_key']) && $order_item['wiaas_option_for'] === $parent_order_item['bundle_cart_key']) { $option_order_items[] = $order_item; } } } return $option_order_items; } public static function get_package_option_groups($package) { $groups_data = $package->get_meta( self::$package_option_groups_meta_key ); $option_groups = array(); foreach ($groups_data as $group_data) { $group = array( 'id' => $group_data['id'], 'name' => $group_data['name'], 'default' => $group_data['default'], 'options' => array() ); foreach ($group_data['options'] as $option_id) { $option_package = wc_get_product( $option_id ); if (is_object($option_package)) { $group['options'][] = $option_package; } } $option_groups[] = $group; } return $option_groups; } } Wiaas_Package_Option_Groups::init();