ในร้านอีคอมเมิร์ซ:
มีรายการที่ปรากฏในโฮมเพจและแต่ละรายการมีปุ่ม "เพิ่มลงในรถเข็น" ใต้รายการเหล่านั้น เมื่อคลิกปุ่มนี้รายการจะถูกเพิ่มลงในรถเข็น ถ้าปุ่มนี้มีการคลิกอีกครั้งจำนวนของรายการที่มีอยู่แล้วในรถเข็นสินค้าที่จะเพิ่มขึ้นโดย 1. ผมเชื่อว่านี่เป็นห่วง จนถึงตอนนี้ดีมาก
ในหน้าผลิตภัณฑ์เดียวมีปุ่ม "ใส่ในรถเข็น" เมื่อคลิกปุ่มนี้รายการจะถูกเพิ่มลงในรถเข็น มีช่องป้อนข้อความ Quantity เช่นกันซึ่งสามารถใช้เปลี่ยนปริมาณได้ นี่ก็ใช้ได้เช่นกัน
ปัญหา:
ฉันต้องแยกความแตกต่างระหว่างปุ่ม "เพิ่มลงในรถเข็น" ที่ถูกคลิกภายในลูป (ขณะนี้อยู่ในโฮมเพจ แต่ยังสามารถใช้กับหน้าอื่นเช่นหน้าเก็บถาวรเป็นต้น) เทียบกับปุ่ม "เพิ่มลงในรถเข็น" ที่ถูกคลิก บนหน้าผลิตภัณฑ์เดียว จากความแตกต่างนี้นี่คือสิ่งที่ฉันต้องทำ:
- หากมีการคลิกปุ่ม "เพิ่มลงในรถเข็น" ที่ปรากฏในลูปให้คว้าจำนวนของรายการนี้ที่มีอยู่แล้วในรถเข็นโดยใช้
$cart_item_key
เพิ่มขึ้นทีละ 1 และส่งไปยังฟังก์ชันที่กำหนดเองซึ่งจะทำการประมวลผลเพิ่มเติมและบันทึกรายละเอียด ที่จะซื้ออีกครั้ง - หากคลิกปุ่ม "เพิ่มลงในรถเข็น" ที่ปรากฏในหน้าผลิตภัณฑ์เดียวคว้าจำนวนของรายการนี้ที่มีอยู่แล้วในรถเข็นโดยใช้
$cart_item_key
คูณด้วย 3 แล้วส่งไปยังฟังก์ชันที่กำหนดเองซึ่งจะทำการประมวลผลเพิ่มเติมและบันทึก รายละเอียดที่จะซื้ออีกครั้ง - ในทั้งสองกรณีข้างต้นปริมาณมีการเปลี่ยนแปลงขึ้นอยู่กับ logics ที่แตกต่างกันและปริมาณนี้จะต้องถูกส่งไปยังการเรียกใช้ฟังก์ชั่นที่กำหนดเอง
ฉันลองอะไร:
ฉันลองรหัสต่อไปนี้:
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();
}
ปัญหาเกี่ยวกับรหัสข้างต้นคือถ้าฉันไม่มีif... else if...
ตรรกะแล้วรหัสจะถูกดำเนินการโดยไม่คำนึงถึงตำแหน่งของปุ่ม "เพิ่มลงในตะกร้า" กล่าวอีกนัยหนึ่งไม่ว่าฉันจะคลิกปุ่ม "เพิ่มลงในรถเข็น" ที่อยู่ในลูป (โฮมเพจหน้าเก็บถาวรหรือหน้าใด ๆ ที่ใช้ลูป) หรือฉันคลิกปุ่ม "หยิบใส่รถเข็น" ที่อยู่ในหน้าผลิตภัณฑ์เดียว รหัสข้างต้นได้รับการดำเนินการในกรณีที่ไม่มีif... else if...
ตรรกะ
ดังนั้นฉันต้องการเรียกใช้รหัสแยกต่างหากเมื่อคลิกปุ่ม "เพิ่มลงในรถเข็น" ที่อยู่ในลูป (โดยไม่คำนึงถึงสถานที่ตั้งไม่ว่าจะเป็นโฮมเพจคลังเก็บ ฯลฯ ) และเรียกใช้รหัสอื่นเมื่อปุ่ม "เพิ่มลงในรถเข็น" ที่อยู่ในหน้าผลิตภัณฑ์เดียวถูกคลิก ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คาดหวังสิ่งนี้:
- หากคลิกปุ่มที่ปรากฏในลูป -> ทำสิ่งนี้
- หากคลิกปุ่มที่ปรากฏในหน้าผลิตภัณฑ์เดียว -> ทำอย่างนั้น