Je veux ajouter au panier deux produits en même temps, l'un est le produit original (en cours) et le deuxième est issu de la liste déroulante
add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
$cnt=2
function custome_add_to_cart() {
global $woocommerce;
$cnt = $cnt + 1;
echo $cnt."X";
echo $p_id=$_POST['assessories'];
$woocommerce->cart->add_to_cart($p_id, 1);
}
Sortie: - Comme vous pouvez le voir dans l'image de sortie ci-dessous, il ajoute le même élément déroulant plusieurs fois dans le panier, mais je ne souhaite ajouter qu'une seule quantité au panier. il semble que la fonction add_to_cart s'exécute plusieurs fois. Que dois-je faire ou comment ajouter un filtre avec le deuxième produit déroulant comme paramètre à ajouter à la fonction panier? afin que je puisse ajouter ce produit également dans le panier.
Cela devrait fonctionner:
add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
function custome_add_to_cart() {
global $woocommerce;
$product_id = $_POST['assessories'];
$found = false;
//check if product already in cart
if ( sizeof( WC()->cart->get_cart() ) > 0 ) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->id == $product_id )
$found = true;
}
// if product not found, add it
if ( ! $found )
WC()->cart->add_to_cart( $product_id );
} else {
// if no products in cart, add it
WC()->cart->add_to_cart( $product_id );
}
}
Basé sur la source suivante: https://docs.woothemes.com/document/automatically-add-product-to-cart-on-visit/
Les fonctions woocommerce "add_to_cart" exécutent le hook "woocommerce_add_to_cart". Ainsi, dans votre code "add_to_cart" est exécuté, ce qui exécute "woocommerce_add_to_cart" qui exécute votre code, qui exécute "add_to_cart", etc., etc. Vous avez créé une boucle récursive.
Vous devez trouver un autre moyen ou arrêter d'appeler $woocommerce->cart->add_to_cart($p_id, 1);
dans votre propre code.
Ce que vous recherchez peut-être est un produit variable avec certains attributs!
Quoi qu'il en soit, si vous voulez vraiment faire cela, alors vous avez juste besoin de la fonction remove_action:
add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
function custome_add_to_cart() {
$p_id=$_POST['assessories'];
remove_action('woocommerce_add_to_cart', __FUNCTION__);
WC()->cart->add_to_cart( $p_id );
}
Cela empêche l’action de boucler indéfiniment et est assez simple. Elle ne sera donc ajoutée qu’une fois pour ce produit. Vous voudrez peut-être obtenir la quantité ajoutée au panier et la définir en tant que second paramètre de la fonction WC()->cart->add_to_cart
afin qu’elles soient toutes les deux identiques.
Le __FUNCTION__
est une balise magique PHP qui vous donne simplement le nom de la fonction actuelle sous forme de chaîne. Si le nom de la fonction n’est pas le même, il fonctionnera quand même.