/**
* Plugin Name: ERP - WooCommerce Sync
* Description: Erp Sync
*/
// Exit if accessed directly
if(!defined('ABSPATH')) {
exit;
}
// Getting the saved API response
$api = file_get_contents(plugin_dir_path( _FILE_ ) . 'api.json', 'r');
$api_products = json_decode($api);
$product_ids = [336, 337];
add_action( 'wp_loaded', function() use ($api_products, $product_ids) {
foreach ($product_ids as $product_id)
create_update_variations($api_products, $product_id);
});
/**
* Creating/updating attributes and variations
*/
function create_update_variations($api_products, $product_id) {
$size_variations = [];
$fusion_variations = [];
// Taking nd/single order
foreach ($api_products[1]->price_all->rows as $api_product) {
if (str_contains($api_product[0], 'nd') && $api_product[2] == 'single') {
$fusion_variations[] = $api_product[1];
$size_variations[] = $api_product[5];
}
}
$fusion_variations = array_unique($fusion_variations);
// Loading attributes
$product = wc_get_product($product_id);
$attributes = $product->get_attributes();
// Creating or updating sizes
if (!isset($attributes['Size'])) {
$size_attribute = new WC_Product_Attribute();
$size_attribute->set_id(0);
$size_attribute->set_name('Size');
$size_attribute->set_options($size_variations);
$size_attribute->set_visible(true);
$size_attribute->set_variation(true);
$attributes['Size'] = $size_attribute;
} else {
$size_attribute = $attributes['Size'];
$size_attribute->set_options($size_variations);
}
// Creating or updating fusions
if (!isset($attributes['Fusion'])) {
$fusion_attribute = new WC_Product_Attribute();
$fusion_attribute->set_id(0);
$fusion_attribute->set_name('Fusion');
$fusion_attribute->set_options($fusion_variations);
$fusion_attribute->set_visible(true);
$fusion_attribute->set_variation(true);
$attributes['Fusion'] = $fusion_attribute;
} else {
$fusion_attribute = $attributes['Fusion'];
$fusion_attribute->set_options($fusion_variations);
}
$product->set_attributes($attributes);
$product->save();
// Creating variations
$variable_product = wc_get_product($product_id);
$existing_variations = $variable_product->get_children();
foreach ($size_variations as $size) {
foreach ($fusion_variations as $fusion) {
// Check if a variation with these attributes already exists
$variation_exists = false;
foreach ($existing_variations as $variation_id) {
$variation = wc_get_product($variation_id);
$variation_attributes = $variation->get_attributes();
if (isset($variation_attributes['Size']) && isset($variation_attributes['Fusion']) && $variation_attributes['Size'] == $size && $variation_attributes['Fusion'] == $fusion) {
$variation_exists = true;
break;
}
}
// If the variation doesn't exist, create it
if (!$variation_exists) {
$variation = new WC_Product_Variation();
$variation->set_regular_price(20);
$variation->set_attributes(array(
'Fusion' => $fusion,
'Size' => $size
));
$variation->set_parent_id($product_id);
$variation->save();
}
}
}
}```
This code successfully creating variations, but not bounding their attributes. Here is the "api.json" file code:
```[
{
"client": "TSS",
"manager": "Mike",
"unit": "М14",
"category_m14store": ""
},
{
"price_all": {
"columns": [
{
"text": "Name",
"type": "string"
},
{
"text": "Fusion",
"type": "string"
},
{
"text": "PriceType",
"type": "string"
},
{
"text": "ProdType",
"type": "string"
},
{
"text": "Price",
"type": "string"
},
{
"text": "Size",
"type": "string"
}
],
"rows": [
[
"Nd - 31,75",
"oen",
"single",
"ball oen;oen-mg",
"25",
"31,75"
],
[
"Nd - 32,00",
"oen",
"single",
"ball oen;oen-mg",
"25",
"32"
]
],
"type": "table"
}
}
]```
Add a comment
|