Im E-Commerce-Shop:
Auf der Startseite werden Artikel angezeigt, und unter jedem Artikel befindet sich eine Schaltfläche "In den Warenkorb". Wenn Sie auf diese Schaltfläche klicken, wird der Artikel in den Warenkorb gelegt. Wenn Sie erneut auf diese Schaltfläche klicken, wird die Menge des Artikels, der bereits im Warenkorb vorhanden ist, um 1 erhöht. Ich glaube, dies ist die Schleife . So weit, ist es gut.
Auf der Seite "Einzelprodukt" befindet sich die Schaltfläche "In den Warenkorb". Wenn Sie auf diese Schaltfläche klicken, wird der Artikel in den Warenkorb gelegt. Es gibt auch ein Textfeld für die Mengeneingabe, in dem die Menge geändert werden kann. Das ist auch gut so.
DIE ANGELEGENHEIT:
Ich muss zwischen der Schaltfläche "In den Warenkorb", auf die innerhalb der Schleife geklickt wurde (derzeit auf der Startseite, kann aber auch auf anderen Seiten wie der Archivseite usw. verwendet werden) und der Schaltfläche "In den Warenkorb", auf die geklickt wurde, unterscheiden auf der Seite Einzelprodukt. Aufgrund dieser Unterscheidung muss ich Folgendes tun:
- Wenn auf die Schaltfläche "In den Warenkorb" geklickt wurde, die in der Schleife angezeigt wird, nehmen Sie die Menge dieses Artikels, der bereits im Warenkorb vorhanden ist, mit
$cart_item_key
, erhöhen Sie sie um 1 und senden Sie diese an eine benutzerdefinierte Funktion, die zusätzliche Verarbeitung durchführt und die Details speichert wieder karren. - Wenn Sie auf die Schaltfläche "In den Warenkorb" auf der Seite "Einzelprodukt" geklickt haben, nehmen Sie die Menge dieses Artikels, der bereits im Warenkorb vorhanden ist, mit
$cart_item_key
, multiplizieren Sie sie mit 3 und senden Sie diese an eine benutzerdefinierte Funktion, die zusätzliche Verarbeitung und Speicherung durchführt die Details wieder in den Warenkorb. - In beiden oben genannten Fällen wird die Menge basierend auf unterschiedlichen Logiken geändert, und diese Menge muss an einen benutzerdefinierten Funktionsaufruf gesendet werden.
WAS ICH VERSUCHT HABE:
Ich habe den folgenden Code ausprobiert:
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();
}
Das Problem mit dem obigen Code ist, dass, wenn ich die if... else if...
Logik nicht habe , der Code ausgeführt wird, unabhängig davon, wo sich die Schaltfläche "In den Warenkorb" befindet. Mit anderen Worten, ob ich auf die Schaltfläche "In den Warenkorb" klicke, die sich in der Schleife befindet (Startseite, Archivseite oder eine Seite, die die Schleife verwendet), oder auf die Schaltfläche "In den Warenkorb" auf der Seite "Einzelprodukt". Der obige Code wird in Abwesenheit der if... else if...
Logik ausgeführt.
Daher möchte ich separaten Code ausführen, wenn auf die Schaltfläche "In den Warenkorb" in der Schleife geklickt wird (unabhängig von der Position, ob Startseite, Archiv usw.), und anderen Code ausführen, wenn auf die Schaltfläche "In den Warenkorb" geklickt wird Klicken Sie auf die Seite Einzelprodukt. Wie kann ich das erreichen?
Erwarten Sie so etwas:
- Wenn auf die Schaltfläche in der Schleife geklickt wird -> Tun Sie dies.
- Wenn auf der Seite Einzelprodukt die Schaltfläche angezeigt wird, klicken Sie auf -> Tun Sie dies.
quelle
Sie können dies folgendermaßen versuchen:
Sie müssen jedoch Ihre Einstellungen überprüfen.
Settings > Permalinks
.quelle
Sie können verwenden
is_product()
,is_product_category()
Funktionquelle
$new_quantity = $quantity_from_cart * 3;
funktioniert. Aber das tut es nicht. Es erhöht einfach die aktuell vorhandene Menge im Warenkorb, multipliziert die Menge jedoch NICHT mit 3 . Wie kann ich das beheben?if ( is_product() )
wird nicht ausgeführt wird. Ich kann den Grund dafür nicht finden! Ist es wichtig, dass es sich um eine AJAX-Schaltfläche zum Hinzufügen zum Warenkorb handelt?Es gibt einige Lösungen, die ich mir vorstellen kann. Aber hier ist einer:
Wir könnten eine versteckte Eingabe in das Formular einfügen, die der obige Code ausführt.
Dann könnte der Wert wie folgt überprüft werden:
Bitte beachten Sie, dass dies nur eine Idee und keine vollständige Lösung ist ... Sie müssen sich um die Ajax-Taste kümmern.
quelle
$button_location
in der Anfrage übergeben.