Title: Zitune's Replies | WordPress.org

---

# Zitune

  [  ](https://wordpress.org/support/users/zitune/)

 *   [Profile](https://wordpress.org/support/users/zitune/)
 *   [Topics Started](https://wordpress.org/support/users/zitune/topics/)
 *   [Replies Created](https://wordpress.org/support/users/zitune/replies/)
 *   [Reviews Written](https://wordpress.org/support/users/zitune/reviews/)
 *   [Topics Replied To](https://wordpress.org/support/users/zitune/replied-to/)
 *   [Engagements](https://wordpress.org/support/users/zitune/engagements/)
 *   [Favorites](https://wordpress.org/support/users/zitune/favorites/)

 Search replies:

## Forum Replies Created

Viewing 1 replies (of 1 total)

 *   Forum: [Plugins](https://wordpress.org/support/forum/plugins-and-hacks/)
    In
   reply to: [[WooCommerce] Déclenchement d’un hook avec l’ajout au panier des variations](https://wordpress.org/support/topic/declenchement-dun-hook-avec-lajout-au-panier-des-variations/)
 *  Thread Starter [Zitune](https://wordpress.org/support/users/zitune/)
 * (@zitune)
 * [1 year, 9 months ago](https://wordpress.org/support/topic/declenchement-dun-hook-avec-lajout-au-panier-des-variations/#post-17901437)
 * Up 
   It’s actually the “Add to cart” button on the product page that doesn’t trigger
   my function… it’s the same behavior, nothing to do with variationsMy new code:
 *     ```wp-block-code
       function adjust_prices_and_handle_forfait($cart) {    // Remplacez par l'ID du produit forfait    $forfait_product_id = 247;    // Remplacez ces slugs par les slugs des catégories que vous souhaitez ajuster    $category_slugs = array('remise-en-forme', 'arts-energetiques');        // Récupérer dynamiquement le prix du forfait    $forfait_product = wc_get_product($forfait_product_id);    $forfait_price = $forfait_product->get_price();    $remise_en_forme_slug = 'remise-en-forme';    $category_total = 0;    $forfait_in_cart = false;    $remise_en_forme_count = 0;    // Parcourir les articles du panier pour compter les produits de la catégorie 'remise-en-forme'    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {        $product = $cart_item['data'];        $product_id = $product->get_id();        // Vérifier si le produit est le forfait        if ($product_id == $forfait_product_id) {            $forfait_in_cart = true;            continue;        }        // Récupérer les catégories du produit parent si c'est une variation        if ($product->is_type('variation')) {            $parent_id = $product->get_parent_id();            $product_categories = wp_get_post_terms($parent_id, 'product_cat', array('fields' => 'slugs'));        } else {            $product_categories = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'slugs'));        }        // Ajuster les prix des produits de la catégorie 'remise-en-forme'        if (in_array($remise_en_forme_slug, $product_categories)) {            $remise_en_forme_count += $cart_item['quantity'];        }    }    // Parcourir les articles du panier pour ajuster les prix et calculer le total des catégories spécifiées    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {        $product = $cart_item['data'];        $product_id = $product->get_id();        // Récupérer les catégories du produit parent si c'est une variation        if ($product->is_type('variation')) {            $parent_id = $product->get_parent_id();            $product_categories = wp_get_post_terms($parent_id, 'product_cat', array('fields' => 'slugs'));        } else {            $product_categories = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'slugs'));        }        // Ajuster les prix des produits de la catégorie 'remise-en-forme'        if (in_array('remise-en-forme', $product_categories)) {            if ($remise_en_forme_count == 2) {                $cart_item['data']->set_price(107.5);            } elseif ($remise_en_forme_count >= 3) {                $cart_item['data']->set_price(98.33);            }        }        // Calculer le total des produits des catégories spécifiées        foreach ($category_slugs as $category_slug) {            if (in_array($category_slug, $product_categories)) {                $category_total += $product->get_price() * $cart_item['quantity'];            }        }    }    // Si le total des catégories dépasse le prix du forfait, remplacer par le forfait    if ($category_total > $forfait_price && !$forfait_in_cart) {        // Collecter les clés des articles du panier à supprimer        $keys_to_remove = array();        foreach ($cart->get_cart() as $cart_item_key => $cart_item) {            $product = $cart_item['data'];            $product_id = $product->get_id();            // Récupérer les catégories du produit parent si c'est une variation            if ($product->is_type('variation')) {                $parent_id = $product->get_parent_id();                $product_categories = wp_get_post_terms($parent_id, 'product_cat', array('fields' => 'slugs'));            } else {                $product_categories = wp_get_post_terms($product_id, 'product_cat', array('fields' => 'slugs'));            }            // Ajouter la clé à supprimer si le produit est dans une des catégories spécifiées            foreach ($category_slugs as $category_slug) {                if (in_array($category_slug, $product_categories)) {                    $keys_to_remove[] = $cart_item_key;                    break;                }            }        }        // Supprimer les articles du panier        foreach ($keys_to_remove as $key) {            $cart->remove_cart_item($key);        }        // Ajouter le forfait au panier        $cart->add_to_cart($forfait_product_id);    }}add_action('woocommerce_before_calculate_totals', 'adjust_prices_and_handle_forfait');
       ```
   

Viewing 1 replies (of 1 total)