Changeset 3280282
- Timestamp:
- 04/23/2025 08:21:51 PM (12 months ago)
- Location:
- limbo/trunk
- Files:
-
- 5 edited
-
admin/export/limbo-export-functions.php (modified) (1 diff)
-
admin/import/js/limbo-import.js (modified) (1 diff)
-
admin/import/limbo-import-functions.php (modified) (4 diffs)
-
limbo.php (modified) (2 diffs)
-
readme.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
limbo/trunk/admin/export/limbo-export-functions.php
r3253459 r3280282 213 213 214 214 $attributes = limbo_get_product_attributes($product); 215 216 // Format options according to the new structure 215 217 $options = array_map(function($attr) { 218 $field_values = array_map(function($value) { 219 return [ 220 'value' => $value, 221 'additionalPrice' => 0 // Default additional price is 0 222 ]; 223 }, (array)$attr['values']); 224 216 225 return [ 217 226 'fieldName' => $attr['name'], 218 'fieldValues' => (array)$attr['values']227 'fieldValues' => $field_values 219 228 ]; 220 229 }, $attributes); -
limbo/trunk/admin/import/js/limbo-import.js
r3253459 r3280282 170 170 ); 171 171 172 // Log the data being sent to verify images are included 172 173 console.log('Selected products data:', selectedProductsData); 173 console.log('Selected products count:', selectedProductsData.length); 174 175 // Make sure each product has its images array 176 selectedProductsData.forEach(product => { 177 if (!product.images) { 178 product.images = []; 179 } 180 }); 174 181 175 182 const response = await fetch(limboImportData.ajaxurl, { -
limbo/trunk/admin/import/limbo-import-functions.php
r3253459 r3280282 49 49 50 50 // Get and decode products data with proper sanitization 51 $products_raw = sanitize_text_field(wp_unslash($_POST['products']));51 $products_raw = wp_unslash($_POST['products']); 52 52 $products = json_decode($products_raw, true); 53 53 … … 158 158 159 159 return array_map(function($option) { 160 return array( 160 $field_values = []; 161 162 if (isset($option['fieldValues']) && is_array($option['fieldValues'])) { 163 // Handle new format with value and additionalPrice 164 foreach ($option['fieldValues'] as $field_value) { 165 if (is_array($field_value) && isset($field_value['value'])) { 166 // New format 167 $field_values[] = [ 168 'value' => sanitize_text_field($field_value['value']), 169 'additionalPrice' => isset($field_value['additionalPrice']) ? floatval($field_value['additionalPrice']) : 0 170 ]; 171 } else { 172 // Legacy format (just strings) 173 $field_values[] = [ 174 'value' => sanitize_text_field($field_value), 175 'additionalPrice' => 0 176 ]; 177 } 178 } 179 } 180 181 return [ 161 182 'fieldName' => isset($option['fieldName']) ? sanitize_text_field($option['fieldName']) : '', 162 'fieldValues' => isset($option['fieldValues']) && is_array($option['fieldValues']) 163 ? array_map('sanitize_text_field', $option['fieldValues']) 164 : [] 165 ); 183 'fieldValues' => $field_values 184 ]; 166 185 }, $options); 167 186 } … … 250 269 foreach ($options as $option) { 251 270 $attribute_name = wc_sanitize_taxonomy_name($option['fieldName']); 252 $attribute_slug = 'pa_' . $attribute_name; 253 254 if (!taxonomy_exists($attribute_slug)) { 255 limbo_register_product_attribute($attribute_name, $option['fieldName']); 256 } 257 271 // Remove the automatic 'pa_' prefix for custom attributes 272 $attribute_slug = $attribute_name; 273 274 // Create a non-taxonomy attribute 275 $attribute = new WC_Product_Attribute(); 276 $attribute->set_name($attribute_name); 277 278 // Extract values from the new structure 258 279 $attribute_values = array(); 259 foreach ($option['fieldValues'] as $value) { 260 $term = get_term_by('name', $value, $attribute_slug); 261 if (!$term) { 262 $term = wp_insert_term($value, $attribute_slug); 263 } 264 if (!is_wp_error($term)) { 265 $attribute_values[] = is_object($term) ? $term->name : $value; 266 } 267 } 268 269 $attribute = new WC_Product_Attribute(); 270 $attribute->set_name($attribute_slug); 280 foreach ($option['fieldValues'] as $field_value) { 281 $attribute_values[] = $field_value['value']; 282 } 283 271 284 $attribute->set_options($attribute_values); 272 285 $attribute->set_visible(true); 273 286 $attribute->set_variation(true); 287 $attribute->set_position(count($attributes)); 274 288 275 289 $attributes[] = $attribute; … … 427 441 428 442 $variation_attributes = array(); 443 $additional_price_total = 0; 444 429 445 foreach ($variation as $attr_name => $attr_value) { 430 $variation_attributes['pa_' . wc_sanitize_taxonomy_name($attr_name)] = $attr_value; 446 // Use the attribute name directly without 'pa_' prefix 447 $attribute_key = wc_sanitize_taxonomy_name($attr_name); 448 $variation_attributes[$attribute_key] = $attr_value['value']; 449 $additional_price_total += floatval($attr_value['additionalPrice']); 431 450 } 451 432 452 $variation_product->set_attributes($variation_attributes); 433 453 434 454 $variation_product->set_status('publish'); 435 $variation_product->set_regular_price($base_price); 455 // Set price as base price plus any additional price from options 456 $variation_price = $base_price + $additional_price_total; 457 $variation_product->set_regular_price($variation_price); 436 458 $variation_product->set_manage_stock(false); 437 459 $variation_product->set_stock_status('instock'); -
limbo/trunk/limbo.php
r3253459 r3280282 4 4 Plugin URI: https://www.uselimbo.com 5 5 Description: A WooCommerce extension to manage connections and products via a custom admin interface. 6 Version: 1.0. 16 Version: 1.0.3 7 7 Author: Bruno Pastorelli 8 8 Author URI: http://brunopastorelli.com … … 17 17 18 18 // Define plugin constants 19 define('LIMBO_VERSION', '1.0. 1');19 define('LIMBO_VERSION', '1.0.3'); 20 20 define('LIMBO_PLUGIN_FILE', __FILE__); 21 21 define('LIMBO_PLUGIN_DIR', plugin_dir_path(__FILE__)); -
limbo/trunk/readme.txt
r3253459 r3280282 4 4 Requires at least: 5.0 5 5 Tested up to: 6.8 6 Stable tag: 1.0. 26 Stable tag: 1.0.3 7 7 Requires PHP: 7.2 8 8 License: GPLv2 or later
Note: See TracChangeset
for help on using the changeset viewer.