Изменение количества товара Woocommerce

Суть проблемы такая, у меня на сайте WordPress используется WooCommerce, Polylang и Code Snippet Есть простые товары и вариативные, так как в плагине полилэнг приходится создавать разные товары под каждый язык, был написан небольшой код, который обновляет количество на других языках после покупки, выглядит так

add_action('woocommerce_reduce_order_stock', 'sync_stock_between_translations', 10, 1);

function sync_stock_between_translations($order) {
    if (function_exists('pll_get_post_translations')) {
        foreach ($order->get_items() as $item) {
            $product_id = $item->get_product_id();
            $quantity = $item->get_quantity();
            $variation_id = $item->get_variation_id();

            // Обрабатываем простой товар
            if (!$variation_id) {
                $product_translations = pll_get_post_translations($product_id);
                foreach ($product_translations as $lang => $translation_id) {
                    $product = wc_get_product($translation_id);
                    if ($product) {
                        $total_stock = max($product->get_stock_quantity(), 0) - $quantity;
                        $product->set_stock_quantity($total_stock);
                        $product->save();
                        error_log("Updated total stock for product ID: " . $translation_id . " to " . $total_stock);
                    }
                }
            }

Но с вариативными товарами все сложнее, например создается вариативный товар Кола, туда указываются атрибуты размер 500мл и 1л, общее количество товара кола задаётся например 10штук, 500мл 7 штук и 3 штуки литровые - нужно сделать то же самое, при покупке товара на любом из языков, чтоб обновилось количество на остальных языках

            if ($variation_id) {
            // Получаем все переводы родительского товара
            $parent_translations = pll_get_post_translations($product_id);
            foreach ($parent_translations as $lang => $translation_id) {
                $parent_product = wc_get_product($translation_id);
                if ($parent_product && $parent_product->is_type('variable')) {
                    // Обновляем общее количество родительского товара
                    $total_stock = max($parent_product->get_stock_quantity(), 0) - $quantity;
                    $parent_product->set_stock_quantity($total_stock);
                    $parent_product->save();
                    error_log("Updated total stock for variable product ID: " . $translation_id . " to " . $total_stock);

                    // Получаем все вариации родительского товара
                    $variations = $parent_product->get_children();
                    foreach ($variations as $parent_variation_id) {
                        $parent_variation = wc_get_product($parent_variation_id);
                        if ($parent_variation && $parent_variation->get_id() == $variation_id) {
                            // Обновляем количество конкретной вариации на всех языках
                            $variation_translations = pll_get_post_translations($parent_variation_id);
                            foreach ($variation_translations as $lang => $translated_variation_id) {
                                $translated_variation = wc_get_product($translated_variation_id);
                                if ($translated_variation && $translated_variation->is_type('variation')) {
                                    $variation_stock = max($translated_variation->get_stock_quantity(), 0) - $quantity;
                                    $translated_variation->set_stock_quantity($variation_stock);
                                    $translated_variation->save();
                                    error_log("Updated stock for variation ID: " . $translated_variation_id . " to " . $variation_stock);
                                }
                            }
                        }
                    }
                }
            }

Однако после покупки на всех языках вариативного товара обновляется только общее количество товара, если смотреть конкретные вариации например 500мл, количество не меняется


Ответы (0 шт):