Nel negozio di e-commerce:
Ci sono articoli visualizzati sulla Homepage e ognuno di essi ha un pulsante "Aggiungi al carrello" sotto di essi. Quando si fa clic su questo pulsante, l'articolo viene aggiunto al carrello. Se si fa di nuovo clic su questo pulsante, la quantità dell'articolo già esistente nel carrello viene incrementata di 1. Credo che questo sia il ciclo . Fin qui tutto bene.
Nella pagina del singolo prodotto, c'è un pulsante "Aggiungi al carrello". Quando si fa clic su questo pulsante, l'articolo viene aggiunto al carrello. Esiste anche una casella di testo di input Quantità che può essere utilizzata per modificare la quantità. Anche questo va bene.
IL PROBLEMA:
Devo distinguere tra il pulsante "Aggiungi al carrello" su cui è stato fatto clic all'interno del ciclo (attualmente nella home page, ma che può essere utilizzato anche su altre pagine come la pagina Archivio, ecc.) Rispetto al pulsante "Aggiungi al carrello" su cui è stato fatto clic nella pagina del singolo prodotto. Sulla base di questa differenziazione, ecco cosa devo fare:
- Se è stato fatto clic sul pulsante "Aggiungi al carrello" visualizzato nel ciclo, prendi la quantità di questo articolo che è già esistente nel carrello usando il
$cart_item_key
, incrementalo di 1 e invialo a una funzione personalizzata che eseguirà un'ulteriore elaborazione e salverà i dettagli al carrello di nuovo. - Se è stato fatto clic sul pulsante "Aggiungi al carrello" visualizzato nella pagina del singolo prodotto, prendi la quantità di questo articolo già esistente nel carrello utilizzando il
$cart_item_key
, moltiplicalo per 3 e invialo a una funzione personalizzata che eseguirà ulteriori elaborazioni e risparmi i dettagli per il carrello di nuovo. - In entrambi i casi precedenti, la quantità viene modificata in base a logiche diverse e questa quantità deve essere inviata a una chiamata di funzione personalizzata.
COSA HO PROVATO:
Ho provato il seguente codice:
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();
}
Il problema con il codice sopra è che se non ho la if... else if...
logica, il codice viene eseguito indipendentemente da dove si trova il pulsante "Aggiungi al carrello". In altre parole, sia che io faccia clic sul pulsante "Aggiungi al carrello" che si trova nel ciclo (Pagina iniziale, Pagina di archivio o qualsiasi pagina che utilizza il ciclo) o che faccia clic sul pulsante "Aggiungi al carrello" situato nella pagina del singolo prodotto, il codice sopra viene eseguito in assenza della if... else if...
logica.
Quindi, voglio eseguire un codice separato quando si fa clic sul pulsante "Aggiungi al carrello" che si trova nel loop (indipendentemente dalla sua posizione, sia Home page, Archivi, ecc.) Ed eseguire codice diverso quando il pulsante "Aggiungi al carrello" che si trova nella pagina del singolo prodotto viene cliccato. Come posso raggiungere questo obiettivo?
Mi aspettavo qualcosa del genere:
- Se si fa clic sul pulsante che appare all'interno del loop -> Esegui.
- Se si fa clic sul pulsante visualizzato nella pagina Prodotto singolo -> Fallo.