Untitled
unknown
plain_text
a year ago
2.4 kB
10
Indexable
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');
});Editor is loading...
Leave a Comment