У меня есть эта функция для добавления нескольких продуктов по почте:
global $woocommerce;
if ( empty( $_REQUEST['add-to-cart-manual'] ) ) {
return;
}
$product_var_ids = explode( ',', $_REQUEST['add-to-cart-manual'] );
foreach ( $product_var_ids as $product_var_id ) {
$pdt_var_temp = explode( '|', $product_var_id );
$product_id = $pdt_var_temp[0];
$variation_id = $pdt_var_temp[1];
$variation_attribute = $pdt_var_temp[2];
$variation_attribute_value = $pdt_var_temp[3];
$quantity= 1;
$woocommerce->cart->add_to_cart( $product_id, $quantity, $variation_id, array( $variation_attribute => $variation_attribute_value ), null );
}
Эта функция находится в ловушке инициализации и работает с этим форматом:
product_id1 | variation_id1 | variation_attribute1 | variation_value1, product_id2 | variation_id2 | variation_attribute2 | variation_value2
Проблема в том, что первый продукт добавлен. Ir перезаписывает количество в корзине. Например, если в корзине 2 товара 900 и я выполняю,
?add-to-cart-manual=900|808|Talla|04,900|808|Talla|04,900|808|Talla|04
тогда товар 900 изменится на 3 пункта, а не на 5 (2 + 3)
Но если я добавлю больше продуктов, остальные будут работать нормально. Например, если в корзине есть 2x900 и 3x901 и я выполняю
?add-to-cart-manual=900|808|Talla|04,900|808|Talla|04,901|808|Talla|06,901|808|Talla|06
затем продукт 900 меняется на 2 (перезаписывается), а продукт 901 изменяется на 5 (3 + 2, что верно)
Я провел много испытаний, и это всегда одно и то же. Первый продукт перезаписан, но остальное работает нормально.
Кто-нибудь знает, что может происходить?