Forum Replies Created

Viewing 1 replies (of 1 total)
  • Thread Starter Zitune

    (@zitune)

    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 variations
    My new 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)