Zitune
Forum Replies Created
Viewing 1 replies (of 1 total)
-
Forum: Plugins
In reply to: [WooCommerce] Déclenchement d’un hook avec l’ajout au panier des variationsUp
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)