/** * Call variation creation function with a list of defined variation * * @param array $possible_variations A list of variation to create for the current element * @param integer $element_id The product we want to create variation for * * @return mixed The last created variation identifier */ public static function creation_variation_callback($possible_variations, $element_id) { /** Get existing variation */ $existing_variations_in_db = wpshop_products::get_variation($element_id); $existing_variations = array(); if (!empty($existing_variations_in_db)) { foreach ($existing_variations_in_db as $variations_def) { $existing_variations[] = $variations_def['variation_def']; } } /** New variation definition */ $attribute_defining_variation = get_post_meta($element_id, '_wpshop_variation_defining', true); /** Read possible values */ foreach ($possible_variations as $variation_definition) { if (in_array($variation_definition, $existing_variations)) { continue; } $attribute_to_set = array(); foreach ($variation_definition as $attribute_code => $attribute_selected_value) { $attribute = wpshop_attributes::getElement($attribute_code, "'valid'", 'code'); $attribute_to_set[$attribute->data_type][$attribute_code] = $attribute_selected_value; if (empty($attribute_defining_variation['attributes']) || !in_array($attribute_code, $attribute_defining_variation['attributes'])) { $attribute_defining_variation['attributes'][] = $attribute_code; } } $variation_id = wpshop_products::create_variation($element_id, $attribute_to_set); } update_post_meta($element_id, '_wpshop_variation_defining', $attribute_defining_variation); return !empty($variation_id) ? $variation_id : 0; }