Plugin Directory

Changeset 3451113


Ignore:
Timestamp:
01/31/2026 05:42:43 PM (3 weeks ago)
Author:
facturaone
Message:

v4.80

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wp-facturaone/trunk/wp-facturaone.php

    r3451084 r3451113  
    44Plugin URI: https://www.facturaone.com/
    55Description: La forma más fácil de trabajar con tu tienda online desde nuestro ERP FacturaONE.
    6 Version: 4.79
     6Version: 4.80
    77Author: FacturaONE
    88Author URI: https://www.facturaone.com/
     
    355355
    356356
    357 function FONE_actualizastockproducto($item_lookup_id, $stock, $item_wp_stock_control, $item_wp_stock_visible, $item_onorder, $item_wp_backorders){
    358     $mod_wordpress = get_option('mod_wordpress');
    359     if($mod_wordpress>0){
    360         $_product_id = fone_get_product_id_by_idfactura($item_lookup_id);
    361         if ($_product_id > 0) {
    362             // Get an instance of the WC_Product Object
    363             $objProduct = wc_get_product( $_product_id );
    364             if ($item_wp_stock_control==0){
    365                 //producto siempre disponible (con o sin stock)
    366                 $objProduct->set_stock_quantity(9999);
    367                 $objProduct->set_stock_status('instock'); // in stock or outofstock
    368                 $objProduct->set_manage_stock(false);
    369             }else{
    370                 //producto solo disponible si hay stock
    371                 $objProduct->set_stock_quantity($stock);
    372                 if ($stock>0 || $item_wp_backorders>0){ //si $item_wp_backorders = yes o notify manage=true
    373                     $objProduct->set_stock_status('instock'); // in stock or outofstock
    374                     if ($item_wp_stock_visible==1){
    375                         $objProduct->set_manage_stock(true);   
    376                     }else{
    377                         $objProduct->set_manage_stock(false);   
    378                     }
    379                 }else{
    380                     $objProduct->set_stock_status('outofstock'); // in stock or outofstock
    381                     $objProduct->set_manage_stock(false);
    382                 }
    383             }
    384             if($item_onorder==1){
    385                 $objProduct->set_manage_stock(false);
    386                 $objProduct->set_stock_status('outofstock'); // in stock or out of stock value
    387                 $objProduct->set_stock_quantity(0);
    388             }       
    389             if ($item_wp_backorders==1){
    390                 $objProduct->set_backorders('notify');
    391             }else if ($item_wp_backorders==2){
    392                 $objProduct->set_backorders('yes');
    393             }else{
    394                 $objProduct->set_backorders('no');
    395             }
    396             $objProduct->save(); // Save to database and sync
    397             //update_option('_abcbab_afacturaone_status_array','rr0'.$stock);   
    398         }
    399        
    400     }
    401 }
     357
     358
     359
    402360
    403361function FONE_subeproducto($baseurlfact, $deletevariaciones, $item_lookup_id, $item_name, $item_description, $item_description_web, $urlimage, $item_price, $tarifa1, $tarifa2, $tarifa3, $tarifa4, $tarifa5, $item_kgs_neto, $item_kgs_bruto, $familia_id, $subfamilia_id, $item_activado, $tax_rate_id, $variaciones, $compuestos, $item_txt_alternativo, $marca, $ean, $item_clientid, $item_onorder, $item_wp_stock_control, $item_wp_stock_visible, $item_seo_fraseobjetivo, $item_seo_metadescripcion, $item_wp_visibilidad, $item_wp_destacado, $item_slug, $item_description_web_corta, $item_wp_backorders, $item_categorias, $item_sku, $familia_web_activate, $marca_web_activate, $largo='', $ancho='', $alto='', $item_minquantity='', $item_maxquantity='', $item_stepquantity='', $item_stock=0){
     
    448406            $objProduct->set_regular_price($item_price);
    449407            $dirty = true;
    450         }
    451 
    452         // Stock visible (solo si NO controlas stock)
    453         if ((int)$item_wp_stock_control === 0) {
    454             $want_manage_stock = ($item_wp_stock_visible == 1);
    455             if ((bool)$objProduct->get_manage_stock() !== (bool)$want_manage_stock) {
    456                 $objProduct->set_manage_stock($want_manage_stock);
    457                 $dirty = true;
    458             }
    459         }
    460 
    461         // Reglas especiales stock-control / onorder (se mantienen iguales a tu lógica)
    462         if ($item_wp_stock_control == 0) {
    463             if ((int)$objProduct->get_stock_quantity() !== 9999) { $objProduct->set_stock_quantity(9999); $dirty = true; }
    464             if ((string)$objProduct->get_stock_status() !== 'instock') { $objProduct->set_stock_status('instock'); $dirty = true; }
    465             if ((bool)$objProduct->get_manage_stock() !== false) { $objProduct->set_manage_stock(false); $dirty = true; }
    466         }
    467         if ($item_onorder == 1) {
    468             if ((string)$objProduct->get_stock_status() !== 'outofstock') { $objProduct->set_stock_status('outofstock'); $dirty = true; }
    469             if ((int)$objProduct->get_stock_quantity() !== 0) { $objProduct->set_stock_quantity(0); $dirty = true; }
    470         }
    471        
    472         // Backorders
    473         $bo = 'no';
    474         if ($item_wp_backorders == 1) $bo = 'notify';
    475         else if ($item_wp_backorders == 2) $bo = 'yes';
    476         if ((string)$objProduct->get_backorders() !== $bo) {
    477             $objProduct->set_backorders($bo);
    478             $dirty = true;
    479         }
    480        
    481         // Stock real producto simple (DESPUES de backorders)
    482         if ((int)$item_wp_stock_control === 1 && (int)$item_onorder === 0) {
    483             $qty = (int) max(0, floor((float)str_replace(',', '.', (string)$item_stock)));
    484 
    485             if ((bool)$objProduct->get_manage_stock() !== true) { $objProduct->set_manage_stock(true); $dirty = true; }
    486             if ((int)$objProduct->get_stock_quantity() !== $qty) { $objProduct->set_stock_quantity($qty); $dirty = true; }
    487 
    488             $bo_now = (string)$objProduct->get_backorders(); // ya es el correcto
    489             $status = ($qty > 0) ? 'instock' : (($bo_now === 'yes' || $bo_now === 'notify') ? 'onbackorder' : 'outofstock');
    490 
    491             if ((string)$objProduct->get_stock_status() !== $status) { $objProduct->set_stock_status($status); $dirty = true; }
    492408        }
    493409
     
    679595        }
    680596
    681         FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible);
     597        FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible, $item_stock, $item_wp_backorders, $item_onorder, $item_lookup_id);
    682598
    683599        if ($cfg['sync_yoast'] == 1) {
     
    744660    $objProduct->update_meta_data('product_step', sanitize_text_field($item_stepquantity));
    745661
    746     // stock
    747     $bo = 'no';
    748     if ($item_wp_backorders == 1) $bo = 'notify';
    749     else if ($item_wp_backorders == 2) $bo = 'yes';
    750     $objProduct->set_backorders($bo);
    751 
    752     if ((int)$item_wp_stock_control === 0) {
    753 
    754         $objProduct->set_manage_stock(false);
    755         $objProduct->set_stock_quantity(9999);
    756         $objProduct->set_stock_status('instock');
    757 
    758     } else {
    759 
    760         $qty = (int) max(0, floor((float)str_replace(',', '.', (string)$item_stock)));
    761 
    762         $objProduct->set_manage_stock(true);
    763         $objProduct->set_stock_quantity($qty);
    764 
    765         $objProduct->set_stock_status(
    766             $qty > 0
    767                 ? 'instock'
    768                 : (($bo === 'yes' || $bo === 'notify') ? 'onbackorder' : 'outofstock')
    769         );
    770     }
    771 
    772     if ((int)$item_onorder === 1) {
    773         $objProduct->set_stock_quantity(0);
    774         $objProduct->set_stock_status('outofstock');
    775     }   
    776    
    777     //desactiva valoraciones y poder comprar mas de 1 producto
     662    // desactiva valoraciones y poder comprar mas de 1 producto
    778663    $objProduct->set_reviews_allowed(false);
    779664    $objProduct->set_sold_individually(false);
     
    858743    }
    859744
    860     FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible);
     745    FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible, $item_stock, $item_wp_backorders, $item_onorder, $item_lookup_id);
    861746
    862747    if ($cfg['sync_yoast'] == 1) {
     
    866751    return (int) $product_id;
    867752}
     753
    868754
    869755
     
    1002888}
    1003889
    1004 function FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible){
    1005     //global $wpdb;
    1006     //$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->posts} WHERE post_parent = %d AND post_type = 'product_variation'",$_product_id));
     890function FONE_tipo_object_terms($_product_id, $variaciones, $compuestos, $item_price, $item_wp_stock_control, $item_wp_stock_visible, $item_stock, $item_wp_backorders, $item_onorder, $item_lookup_id){
     891    $_product_id = (int)$_product_id;
     892    if ($_product_id <= 0) return;
     893   
    1007894    if ($variaciones!=''){
    1008895        //en el caso de producto variable
     
    1011898        // al cambiar a variable, borra componentes antiguos
    1012899        delete_post_meta($_product_id, 'wooco_components');
     900        // IMPORTANTE: el padre variable no debe gestionar stock como simple
     901        $p = wc_get_product((int)$_product_id);
     902        if ($p) {
     903            $p->set_manage_stock(false);
     904            $p->set_stock_quantity('');
     905            // no fuerces stock_status aquí; lo recalcula Woo con sync
     906            $p->save();
     907        }       
    1013908        FONE_variaciones($_product_id, $variaciones, $item_price, $item_wp_stock_control, $item_wp_stock_visible);
     909       
     910        // REGLA CLAVE: recalcula el padre desde sus variaciones
     911        if (class_exists('WC_Product_Variable') && method_exists('WC_Product_Variable', 'sync')) {
     912            WC_Product_Variable::sync($_product_id);
     913        }
     914        wc_delete_product_transients($_product_id);
     915        return;
    1014916    }else if ($compuestos!=''){
    1015917        wp_remove_object_terms($_product_id, array('simple','variable'), 'product_type');
    1016918        wp_set_object_terms($_product_id, 'composite', 'product_type', false); // byjc wp_set_object_terms( $_product_id, 'composite ', 'product_type', true );
    1017919        FONE_componentes($_product_id, $compuestos);
     920        wc_delete_product_transients($_product_id);
     921        return;       
    1018922    }else{
    1019923        //en el caso de ser producto simple
     
    1021925        wp_set_object_terms($_product_id, 'simple', 'product_type', false);
    1022926        delete_post_meta($_product_id, 'wooco_components');
     927       
     928        // AQUI VA TODO EL STOCK SIMPLE
     929        FONE_set_stock_simple_product((int)$_product_id, $item_wp_stock_control, $item_wp_stock_visible, $item_stock, $item_wp_backorders, $item_onorder);
     930
     931        wc_delete_product_transients((int)$_product_id);
     932        return;
    1023933    }
    1024934}
     935
     936function FONE_set_stock_simple_product($product_id, $item_wp_stock_control, $item_wp_stock_visible, $stock, $item_wp_backorders, $item_onorder)
     937{
     938    $product_id = (int)$product_id;
     939    if ($product_id <= 0) return;
     940
     941    $p = wc_get_product($product_id);
     942    if (!$p) return;
     943
     944    // Producto siempre disponible (con o sin stock)
     945    if ((int)$item_wp_stock_control === 0) {
     946        $p->set_stock_quantity(9999);
     947        $p->set_stock_status('instock');
     948        $p->set_manage_stock(false);
     949    } else {
     950        // Producto solo disponible si hay stock
     951        $qty = (int) max(0, floor((float)str_replace(',', '.', (string)$stock)));
     952        $p->set_stock_quantity($qty);
     953
     954        if ($qty > 0 || (int)$item_wp_backorders > 0) {
     955            $p->set_stock_status('instock');
     956            if ((int)$item_wp_stock_visible === 1) $p->set_manage_stock(true);
     957            else $p->set_manage_stock(false);
     958        } else {
     959            $p->set_stock_status('outofstock');
     960            $p->set_manage_stock(false);
     961        }
     962    }
     963
     964    // Onorder fuerza outofstock siempre
     965    if ((int)$item_onorder === 1) {
     966        $p->set_manage_stock(false);
     967        $p->set_stock_status('outofstock');
     968        $p->set_stock_quantity(0);
     969    }
     970
     971    // Backorders
     972    if ((int)$item_wp_backorders === 1) $p->set_backorders('notify');
     973    else if ((int)$item_wp_backorders === 2) $p->set_backorders('yes');
     974    else $p->set_backorders('no');
     975
     976    $p->save();
     977}
     978
     979
     980function FONE_actualizastockproducto($item_lookup_id, $stock, $item_wp_stock_control, $item_wp_stock_visible, $item_onorder, $item_wp_backorders){
     981    $mod_wordpress = (int)get_option('mod_wordpress');
     982    if ($mod_wordpress <= 0) return;
     983
     984    $_product_id = (int) fone_get_product_id_by_idfactura($item_lookup_id);
     985    if ($_product_id <= 0) return;
     986
     987    FONE_set_stock_simple_product($_product_id, $item_wp_stock_control, $item_wp_stock_visible, $stock, $item_wp_backorders, $item_onorder);
     988}
     989
     990//function FONE_actualizastockproducto_old($item_lookup_id, $stock, $item_wp_stock_control, $item_wp_stock_visible, $item_onorder, $item_wp_backorders){
     991//  $mod_wordpress = get_option('mod_wordpress');
     992//    if($mod_wordpress>0){
     993//        $_product_id = fone_get_product_id_by_idfactura($item_lookup_id);
     994//        if ($_product_id > 0) {
     995//            // Get an instance of the WC_Product Object
     996//            $objProduct = wc_get_product( $_product_id );
     997//            if ($item_wp_stock_control==0){
     998//                //producto siempre disponible (con o sin stock)
     999//                $objProduct->set_stock_quantity(9999);
     1000//                $objProduct->set_stock_status('instock'); // in stock or outofstock
     1001//                $objProduct->set_manage_stock(false);
     1002//            }else{
     1003//                //producto solo disponible si hay stock
     1004//                $objProduct->set_stock_quantity($stock);
     1005//                if ($stock>0 || $item_wp_backorders>0){ //si $item_wp_backorders = yes o notify manage=true
     1006//                    $objProduct->set_stock_status('instock'); // in stock or outofstock
     1007//                    if ($item_wp_stock_visible==1){
     1008//                        $objProduct->set_manage_stock(true); 
     1009//                    }else{
     1010//                        $objProduct->set_manage_stock(false);     
     1011//                    }
     1012//                }else{
     1013//                    $objProduct->set_stock_status('outofstock'); // in stock or outofstock
     1014//                    $objProduct->set_manage_stock(false);
     1015//                }
     1016//            }
     1017//            if($item_onorder==1){
     1018//                $objProduct->set_manage_stock(false);
     1019//                $objProduct->set_stock_status('outofstock'); // in stock or out of stock value
     1020//                $objProduct->set_stock_quantity(0);
     1021//            }     
     1022//            if ($item_wp_backorders==1){
     1023//                $objProduct->set_backorders('notify');
     1024//            }else if ($item_wp_backorders==2){
     1025//                $objProduct->set_backorders('yes');
     1026//            }else{
     1027//                $objProduct->set_backorders('no');
     1028//            }
     1029//            $objProduct->save(); // Save to database and sync
     1030//            //update_option('_abcbab_afacturaone_status_array','rr0'.$stock);
     1031//        }
     1032//       
     1033//    }
     1034//}
     1035
     1036function FONE_set_stock_variation_product($variation_id, $item_wp_stock_control, $item_wp_stock_visible, $stock)
     1037{
     1038    $variation_id = (int)$variation_id;
     1039    if ($variation_id <= 0) return;
     1040
     1041    $v = wc_get_product($variation_id);
     1042    if (!$v || !is_a($v, 'WC_Product_Variation')) return;
     1043
     1044    // No backorders
     1045    $v->set_backorders('no');
     1046    update_post_meta($variation_id, '_backorders', 'no');
     1047
     1048    if ((int)$item_wp_stock_control === 0) {
     1049        $v->set_manage_stock(false);
     1050        $v->set_stock_quantity(9999);
     1051        $v->set_stock_status('instock');
     1052
     1053        update_post_meta($variation_id, '_manage_stock', 'no');
     1054        update_post_meta($variation_id, '_stock', '9999');
     1055        update_post_meta($variation_id, '_stock_status', 'instock');
     1056
     1057        $v->save();
     1058        return;
     1059    }
     1060
     1061    $qty = (int) max(0, floor((float)str_replace(',', '.', (string)$stock)));
     1062
     1063    $v->set_manage_stock(true);
     1064    $v->set_stock_quantity($qty);
     1065    $v->set_stock_status($qty > 0 ? 'instock' : 'outofstock');
     1066
     1067    update_post_meta($variation_id, '_manage_stock', 'yes');
     1068    update_post_meta($variation_id, '_stock', (string)$qty);
     1069    update_post_meta($variation_id, '_stock_status', ($qty > 0 ? 'instock' : 'outofstock'));
     1070
     1071    $v->save();
     1072}
     1073
     1074
     1075
     1076
     1077
    10251078
    10261079function FONE_componentes($_product_id, $compuestos){
     
    12481301            if ($new_variation_id > 0) {
    12491302
     1303                // STOCK: siempre unificado (esto arregla el 0)
     1304                FONE_set_stock_variation_product(
     1305                    $new_variation_id,
     1306                    $item_wp_stock_control,
     1307                    $item_wp_stock_visible,
     1308                    $item_stock
     1309                );
     1310
    12501311                // metas tarifas
    12511312                update_post_meta($new_variation_id, '_tarifa1', $v_price);
     
    12591320                }
    12601321
    1261                 // post_status: draft si no vendible
    12621322                wp_update_post([
    12631323                    'ID' => $new_variation_id,
     
    12651325                ]);
    12661326
    1267                 // Si no vendible, asegura outofstock (por si control stock=0 no aplica por tu setting)
    1268                 if ($vendible === false) {
    1269                     $v = new WC_Product_Variation($new_variation_id);
    1270                     if ($v) {
    1271                         $v->set_manage_stock(false);
    1272                         $v->set_stock_quantity(0);
    1273                         $v->set_stock_status('outofstock');
    1274                         $v->save();
    1275                     }
    1276                 }
     1327                // Quita este bloque, ya no hace falta porque el stock ya lo forzaste arriba:
     1328                // if ($vendible === false) { ... set outofstock ... }
    12771329            }
    12781330        }
     
    14291481    $variation->set_price($regular_price);
    14301482
    1431     // Stock (refuerzo total + coherencia de metas)
    1432     $stock_qty = (float)$stock_qty;
    1433 
    1434     // Siempre fijamos backorders a "no" en tu plugin para evitar
    1435     // que una variación con stock 0 aparezca como "disponible".
    1436     $variation->set_backorders('no');
    1437     update_post_meta($variation_id, '_backorders', 'no');
    1438 
    1439     if ((int)$item_wp_stock_control === 0) {
    1440 
    1441         // Siempre disponible (NO control stock real)
    1442         $variation->set_manage_stock(false);
    1443         $variation->set_stock_quantity(9999);
    1444         $variation->set_stock_status('instock');
    1445 
    1446         // Refuerzo metas legacy
    1447         update_post_meta($variation_id, '_manage_stock', 'no');
    1448         update_post_meta($variation_id, '_stock', '9999');
    1449         update_post_meta($variation_id, '_stock_status', 'instock');
    1450 
    1451     } else {
    1452 
    1453         // Control real de stock
    1454         // Recomendación: mantener manage_stock activado incluso con 0 para que Woo no interprete raro
    1455         // (si tu lógica quiere "visible", úsalo para UI, pero internamente es mejor coherente)
    1456         $variation->set_manage_stock(true);
    1457         update_post_meta($variation_id, '_manage_stock', 'yes');
    1458 
    1459         if ($stock_qty > 0) {
    1460             $qty = (int)$stock_qty;
    1461             $variation->set_stock_quantity($qty);
    1462             $variation->set_stock_status('instock');
    1463 
    1464             update_post_meta($variation_id, '_stock', (string)$qty);
    1465             update_post_meta($variation_id, '_stock_status', 'instock');
    1466         } else {
    1467             $variation->set_stock_quantity(0);
    1468             $variation->set_stock_status('outofstock');
    1469 
    1470             update_post_meta($variation_id, '_stock', '0');
    1471             update_post_meta($variation_id, '_stock_status', 'outofstock');
    1472         }
    1473     }
    1474 
    14751483    // Metas tarifas (tarifa1 = price)
    14761484    update_post_meta($variation_id, '_tarifa1', $regular_price);
     
    14891497    $variation->save();
    14901498
    1491     // Limpia caches de variación y padre
     1499    // 7) Stock (UNIFICADO en una sola función)
     1500    FONE_set_stock_variation_product(
     1501        $variation_id,
     1502        $item_wp_stock_control,
     1503        $item_wp_stock_visible,
     1504        $stock_qty
     1505    );
     1506   
     1507    // 8) Limpia caches
    14921508    wc_delete_product_transients($variation_id);
    14931509    wc_delete_product_transients($parent_product_id);
    14941510
    1495     // Fuerza sync del variable (recalcula estados desde variaciones)
     1511    // 9) Sync del variable (recalcula estado del padre desde variaciones)
    14961512    if (class_exists('WC_Product_Variable') && method_exists('WC_Product_Variable', 'sync')) {
    14971513        WC_Product_Variable::sync($parent_product_id);
     
    15761592
    15771593    // Prices
    1578     if( empty( $variation_data['sale_price'] ) ){
    1579         $variation->set_price( $variation_data['regular_price'] );
     1594    if (empty($variation_data['sale_price'])) {
     1595        $variation->set_price($variation_data['regular_price']);
    15801596    } else {
    1581         $variation->set_price( $variation_data['sale_price'] );
    1582         $variation->set_sale_price( $variation_data['sale_price'] );
    1583     }
    1584     $variation->set_regular_price( $variation_data['regular_price'] );
    1585 
    1586     // Stock
    1587     if( ! empty($variation_data['stock_qty'])  ){
    1588         if ($variation_data['stock_qty']>0){
    1589             $variation->set_stock_quantity( $variation_data['stock_qty'] );
    1590             if ($item_wp_stock_visible==1){
    1591                 $variation->set_manage_stock(true);     
    1592             }else{
    1593                 $variation->set_manage_stock(false);   
    1594             }
    1595             //$variation->set_stock_status('');
    1596             $variation->set_stock_status('instock');
    1597         }else{
    1598             $variation->set_stock_quantity(0);
    1599             $variation->set_manage_stock(false);   
    1600             $variation->set_stock_status('outofstock');
    1601         }
    1602     }
    1603     if ($item_wp_stock_control==0){
    1604         //producto siempre disponible (con o sin stock)
    1605         $variation->set_stock_quantity(9999);
    1606         $variation->set_stock_status('instock'); // in stock or outofstock
    1607         $variation->set_manage_stock(false); // true or false   
    1608     }
    1609    
     1597        $variation->set_price($variation_data['sale_price']);
     1598        $variation->set_sale_price($variation_data['sale_price']);
     1599    }
     1600    $variation->set_regular_price($variation_data['regular_price']);
     1601
    16101602    $variation->set_weight(''); // weight (reseting)
    16111603
    1612     $variation->save(); // Save the data
    1613    
    1614     return $variation_id;
    1615 }
     1604    $variation->save();
     1605
     1606    return $variation_id;
     1607}
     1608
    16161609function FONEcreate_global_attribute($name, $slug)
    16171610{
     
    33963389        $reco = [
    33973390          ['Yoast SEO','wordpress-seo', ['wordpress-seo/wp-seo.php','wordpress-seo-premium/wp-seo-premium.php']],
    3398           ['Variation Swatches for WooCommerce','variation-swatches-woo'],
     3391          ['Variation Swatches for WooCommerce','variation-swatches-woo', []],
    33993392          ['YITH WooCommerce Brands Add-On','yith-woocommerce-brands-add-on', []],
    34003393          ['Min Max Quantity & Step Control (Woo)','woo-min-max-quantity-step-control-single', []],
Note: See TracChangeset for help on using the changeset viewer.