3

I have a product with a list of variations, as an example one of the variations is "36" (ID: 17393). I want to set a new price and a new quantity of this variation of the product (with external information).

enter image description here

For now, I have this code, but I have certain functions that I do not know.

<?php
if ( $product->is_type( 'variable' ) ) {

  $dataCSV = "36,2.0" , "37,3.0" , "39,4.0"; //example of external info
  //$dataCSV have for each "talla" the quantity
  $misAtributos = $product->get_attribute('Tallas');
  //$misAtributos = 35 | 36 | 37 | 38 | 39 | 40
  $AllTallas= explode(" | ", $misAtributos);
  foreach ($AllTallas as $key => $talla) {

    foreach ($dataCSV as $key => $Qnty) {
      //first element [36, 2.0]
      //$Qnty[0] = 36
      //$Qnty[1] = 2.0
      if($talla = $Qnty[0]){
        //Update stock of and price.
      }
    }
    echo '<br>'.(float)$value;

  }

}
?>
  1. How to get the ID of the product (17393) instead of the variation name (36)?
  2. How to set the new price and new quantity for this variation of the product?
LoicTheAztec
  • 184,753
  • 20
  • 224
  • 275
mikesneider
  • 599
  • 5
  • 22

1 Answers1

3

First your $dataCSV (external info) should require to be converted in a multidimensional explicit formatted array, instead of a string…

Then you can loop through each variation ID of the parent variable product this way (and update data):

<?php
if ( $product->is_type( 'variable' ) ) {
    
    $dataCSV = "36,2.0" , "37,3.0" , "39,4.0"; // <== This requires to be a multidimensional array
    
    $attribute_label_name = 'Tallas';
    
    // Loop through the variation IDs
    foreach( $product->get_children() as $key => $variation_id ) {
        // Get an instance of the WC_Product_Variation Object
        $variation = wc_get_product( $variation_id );
        
        // Get the variation attaribute "size" value 
        $size = $product->get_attribute($attribute_label_name);
        
        // ------------------------------
        // Then in between your code HERE … / …
        // ------------------------------
        
        // Set the stock quantity
        $variation->set_stock_quantity($stock_quantity);

        // Set the stock status
        $variation->set_stock_status('instock');

        // Set price
        $variation->set_regular_price($price);
        $variation->set_price($price);

        // Save data (refresh cached data)
        $variation->save();
    }
}
?>
LoicTheAztec
  • 184,753
  • 20
  • 224
  • 275