Reputation: 822
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).
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;
}
}
?>
Upvotes: 3
Views: 2808
Reputation: 254483
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();
}
}
?>
Upvotes: 4