Untitled
add_filter('b2bking_cart_item_quantity_tiersz', function($qty, $variation_id, $product_id = '') { if (empty($product_id)){ $product_id = wp_get_post_parent_id($variation_id); } // Get cached grouped products mapping $grouped_products_map = get_transient('b2bking_grouped_products_map'); // If cache doesn't exist, build the mapping if (false === $grouped_products_map) { $grouped_products_map = []; // Get all grouped products $grouped_products = get_posts(array( 'post_type' => 'product', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'product_type', 'field' => 'slug', 'terms' => 'grouped' ) ) )); // Build mapping of product IDs to their group ID foreach ($grouped_products as $grouped_product) { $children = get_post_meta($grouped_product->ID, '_children', true); if (!empty($children)) { foreach ($children as $child_id) { $grouped_products_map[$child_id] = $grouped_product->ID; } } } // Cache the mapping for 12 hours set_transient('b2bking_grouped_products_map', $grouped_products_map, 12 * HOUR_IN_SECONDS); } // If current product is not part of any group, return original quantity if (!isset($grouped_products_map[$product_id])) { return $qty; } $group_id = $grouped_products_map[$product_id]; $cart = WC()->cart; $total_group_qty = 0; // Calculate total quantity for all products in the same group foreach ($cart->get_cart() as $cart_item) { $cart_product_id = $cart_item['product_id']; if (isset($grouped_products_map[$cart_product_id]) && $grouped_products_map[$cart_product_id] === $group_id) { $total_group_qty += $cart_item['quantity']; } } return $total_group_qty; }, 10, 3); // Clear cache when products are modified add_action('save_post_product', function($post_id) { delete_transient('b2bking_grouped_products_map'); }); add_action('woocommerce_delete_product', function($post_id) { delete_transient('b2bking_grouped_products_map'); });
Leave a Comment