Dans la boutique en ligne:
Il y a des articles affichés sur la page d'accueil et chacun d'eux a un bouton "Ajouter au panier" en dessous d'eux. Lorsque ce bouton est cliqué, l'article est ajouté au panier. Si ce bouton est cliqué à nouveau, la quantité de l'article qui existe déjà dans le panier est incrémentée de 1. Je pense que c'est la boucle . Jusqu'ici tout va bien.
Sur la page Produit unique, il y a un bouton "Ajouter au panier". Lorsque ce bouton est cliqué, l'article est ajouté au panier. Il existe également une zone de texte de saisie de quantité qui peut être utilisée pour modifier la quantité. C'est bien aussi.
LE PROBLÈME:
Je dois faire la différence entre le bouton "Ajouter au panier" qui a été cliqué dans la boucle (actuellement sur la page d'accueil, mais peut également être utilisé sur d'autres pages telles que la page d'archives, etc.) et le bouton "Ajouter au panier" sur lequel vous avez cliqué. sur la page Produit unique. Sur la base de cette différenciation, voici ce que je dois faire:
- Si le bouton "Ajouter au panier" apparaissant dans la boucle a été cliqué, saisissez la quantité de cet article qui existe déjà dans le panier à l'aide de
$cart_item_key
, augmentez-la de 1 et envoyez-la à une fonction personnalisée qui effectuera un traitement supplémentaire et enregistrera les détails. au panier à nouveau. - Si le bouton "Ajouter au panier" apparaissant sur la page Produit unique a été cliqué, saisissez la quantité de cet article qui existe déjà dans le panier à l'aide de
$cart_item_key
, multipliez-la par 3 et envoyez-la à une fonction personnalisée qui effectuera un traitement supplémentaire et économisera les détails au panier à nouveau. - Dans les deux cas ci-dessus, la quantité est modifiée en fonction de logiques différentes et cette quantité doit être envoyée à un appel de fonction personnalisé.
CE QUE J'AI ESSAYÉ:
J'ai essayé le code suivant:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
Le problème avec le code ci-dessus est que si je n'ai pas la if... else if...
logique, le code est exécuté indépendamment de l'emplacement du bouton "Ajouter au panier". En d'autres termes, que je clique sur le bouton "Ajouter au panier" situé dans la boucle (page d'accueil, page d'archive ou toute page utilisant la boucle) ou que je clique sur le bouton "Ajouter au panier" situé sur la page du produit unique, le code ci-dessus est exécuté en l'absence de laif... else if...
logique.
Donc, je veux exécuter un code distinct lorsque le bouton "Ajouter au panier" situé dans la boucle est cliqué (quel que soit son emplacement, que ce soit la page d'accueil, les archives, etc.) et exécuter un code différent lorsque le bouton "Ajouter au panier" qui se trouve sur la page Produit unique est cliqué. Comment puis-je atteindre cet objectif?
Attendre quelque chose comme ça:
- Si le bouton apparaissant à l'intérieur de la boucle est cliqué -> Faites ceci.
- Si le bouton apparaissant sur la page Produit unique est cliqué -> Faites cela.
la source
Vous pouvez essayer de cette façon:
Mais vous devez vérifier vos paramètres.
Settings > Permalinks
.la source
vous pouvez utiliser
is_product()
,is_product_category()
fonctionnerla source
$new_quantity = $quantity_from_cart * 3;
fonctionne. Mais ce n'est pas le cas. Il incrémente simplement la quantité existante dans le panier, mais ne multiplie PAS la quantité par 3 . Comment régler ceci?if ( is_product() )
n'est PAS en cours d'exécution. Je n'arrive pas à trouver la raison! Est-il important que ce soit un bouton AJAX Ajouter au panier ??Il y a quelques solutions auxquelles je pourrais penser. Mais en voici un:
Nous pourrions ajouter une entrée cachée à l'intérieur du formulaire, le code ci-dessus le fait.
Ensuite, pourrait vérifier sa valeur comme:
Veuillez noter que ce n'est qu'une idée et non une solution complète ... Vous devez prendre soin du bouton ajax.
la source
$button_location
dans la demande ..