I am running a custom function that adds an item variation to the cart. It is registered as a route route. The code of the function:
try {
require WP_PLUGIN_DIR . '/woocommerce/includes/wc-cart-functions.php';
require WP_PLUGIN_DIR . '/woocommerce/includes/wc-notice-functions.php';
WC()->session = new WC_Session_Handler();
WC()->session->init();
if (!WC()->cart) {
WC()->initialize_cart();
}
$passed_validation = apply_filters('woocommerce_add_to_cart_validation', true, $_POST['product'], $_POST['quantity'], $_POST['variation']);
$product_status = get_post_status($_POST['product']);
if ($product_status == 'publish' && $passed_validation && WC()->cart->add_to_cart($_POST['product'], $_POST['quantity'], $_POST['variation'])) {
do_action('woocommerce_ajax_added_to_cart', $_POST['product']);
wc_add_to_cart_message($_POST['product']);
}
} catch (Exception $e) {
error_log($e->getMessage());
}
The add_to_cart
function correctly returns the variation hash and the "add to cart message" correctly appears in the cart. However, only the first product is actually added to the cart. After I remove that added item, I can add a product to the cart again.
Is this a correct behaviour? The function should add a new product to the cart no matter how many products are already in there.
I also tried running this code without woocommerce_add_to_cart_validation
filter and woocommerce_ajax_added_to_cart
action and it works exactly the same way.
All the products are in stock.
source https://stackoverflow.com/questions/70396645/woocommerce-custom-add-to-cart-function-adding-only-first-item
Comments
Post a Comment