Как динамически добавлять остатки одной вариации в другую?
Если у кого-то есть идеи, помогите пожалуйста разобраться с задачей:
- есть вариативный товар в магазине на woocommerce
- у товара есть размеры 100см, 120см, 125см
- по сути размеры 120см и 125см одно и то же
- в остатках товара с размером 120см - 5 шт.
- как сделать так, чтобы в остатках товара с размером 125см тоже было 5шт ?
- при добавлении в корзину пользователь должен видеть 125см и списываться остаток должен у 120см
- при этом магазин синхронизирует остатки с моим складом каждые 6 часов и возможностей просто добавить остататок к пустой вариации в мой склад нет (там все должно быть правильно), т.е. желательно чтобы все работало на стороне движка
Зачем изначально было делать 120 и 125 разными вариациями, если это одно и тоже?
Нужно сделать (переделать) это одной вариацией.
А если необходимо чтобы пользователь уточнял что ему нужно, то можно добавить кастомные поля для вариантов.
для пользователя это "разные размеры", так требует маркетолог
Непонятно как они разные, если ты пишешь что одно и тоже...
Нужно отталкиваться от SKU а не прихотей муркетолухов. Если товар реально один, с одним артикулом, то это простой товар. Если 120 и 125 разновидности с разным артикулом, то это вариативный. И на складе, соответственно, учитываются по артикулам. И тогда ни о каком "объедении остатков" речи быть не может.
К сожалению не вариант
В твоём случае это единственно правильный вариант.
И может даже вообще в данном случае вариативные не нужны.
Не совсем понимаю, как это реализовать.
Полно плагинов для допполей в товарах.
Это может выглядеть приблизительно так
Такое можно делать как для простых, так и для вариантов вариативных товаров.
Refguser, решил таким способом, если интересно
добавил по дефлту каждому 125 размеру 1 в остаток и вевел на сайт
потом добавил проверку в браузере через js
// Hook to set stock status and quantity of size 125
add_action('woocommerce_before_single_product', 'update_size_125_stock_status_and_quantity');
function update_size_125_stock_status_and_quantity() {
global $product;
// Check if it's a variable product
if ($product->is_type('variable')) {
$attribute_name = 'pa_razmer'; // Replace with your actual attribute name
$attribute_value_125 = '125';
// Get the product ID
$product_id = $product->get_id();
// Set stock status and quantity of size 125
set_stock_status_and_quantity($product_id, $attribute_name, $attribute_value_125);
}
}
// Function to set stock status and quantity of size 125
function set_stock_status_and_quantity($product_id, $attribute_name, $attribute_value) {
$variations = get_variations_by_attribute($product_id, $attribute_name, $attribute_value);
foreach ($variations as $variation) {
$variation_id = $variation['variation_id'];
update_post_meta($variation_id, '_stock_status', 'instock'); // Set stock status to "in stock"
update_post_meta($variation_id, '_stock', 1); // Set stock quantity to 1 (you can change this to your desired quantity)
}
}
// Function to get variations based on attribute value
function get_variations_by_attribute($product_id, $attribute_name, $attribute_value) {
$variations = array();
$args = array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'menu_order',
'order' => 'asc',
'meta_query' => array(
array(
'key' => 'attribute_' . $attribute_name,
'value' => $attribute_value,
'compare' => '=',
),
),
'fields' => 'ids',
);
$variation_ids = get_posts($args);
foreach ($variation_ids as $variation_id) {
$variation = wc_get_product($variation_id);
$variations[] = array(
'variation_id' => $variation_id,
'attributes' => $variation->get_variation_attributes(),
);
}
return $variations;
}