Trong cửa hàng thương mại điện tử:
Có các mục được hiển thị trên Trang chủ và mỗi mục có nút "Thêm vào giỏ hàng" bên dưới chúng. Khi nhấp vào nút này, mục này sẽ được thêm vào giỏ hàng. Nếu nút này được bấm lại, Số lượng của mặt hàng đã tồn tại trong giỏ hàng, được tăng thêm 1. Tôi tin rằng đây là vòng lặp . Càng xa càng tốt.
Trên trang Một sản phẩm, có nút "Thêm vào giỏ hàng". Khi nhấp vào nút này, mục sẽ được thêm vào giỏ hàng. Cũng có một hộp văn bản đầu vào Số lượng có thể được sử dụng để thay đổi số lượng. Điều này cũng tốt
VẤN ĐỀ:
Tôi cần phân biệt giữa nút "Thêm vào giỏ hàng" đã được nhấp trong vòng lặp (hiện tại trên Trang chủ, nhưng cũng có thể được sử dụng trên các trang khác như trang Lưu trữ, v.v.) so với nút "Thêm vào giỏ hàng" đã được nhấp trên trang Sản phẩm duy nhất. Dựa trên sự khác biệt này, đây là những gì tôi cần làm:
- Nếu nút "Thêm vào giỏ hàng" xuất hiện trong vòng lặp đã được nhấp, hãy lấy Số lượng của mặt hàng này đã tồn tại trong giỏ hàng bằng cách sử dụng
$cart_item_key
, tăng nó lên 1 và gửi nó đến một chức năng tùy chỉnh sẽ xử lý bổ sung và lưu chi tiết để giỏ hàng một lần nữa. - Nếu nút "Thêm vào giỏ hàng" xuất hiện trong trang Sản phẩm đơn lẻ đã được nhấp, hãy lấy Số lượng của mặt hàng này đã có trong giỏ hàng bằng cách sử dụng
$cart_item_key
, nhân nó với 3 và gửi nó đến một chức năng tùy chỉnh sẽ xử lý bổ sung và lưu các chi tiết để giỏ hàng một lần nữa. - Trong cả hai trường hợp trên, Số lượng đang được thay đổi, dựa trên các logic khác nhau và Số lượng này cần được gửi đến một cuộc gọi chức năng tùy chỉnh.
Tôi đã nói gì
Tôi đã thử đoạn mã sau:
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();
}
Vấn đề với mã ở trên là nếu tôi không có if... else if...
logic, thì mã được thực thi bất kể vị trí của nút "Thêm vào giỏ hàng". Nói cách khác, cho dù tôi nhấp vào nút "Thêm vào giỏ hàng" nằm trong vòng lặp (Trang chủ, trang Lưu trữ hoặc bất kỳ trang nào sử dụng vòng lặp) hoặc tôi nhấp vào nút "Thêm vào giỏ hàng" nằm trong trang Sản phẩm đơn, đoạn mã trên được thực thi trong trường hợp không có if... else if...
logic.
Vì vậy, tôi muốn chạy mã riêng khi nút "Thêm vào giỏ hàng" được đặt trong vòng lặp được nhấp (bất kể vị trí của nó, cho dù Trang chủ, Lưu trữ, v.v.) và chạy mã khác khi nút "Thêm vào giỏ hàng" được đặt trên trang Sản phẩm duy nhất được nhấp. Làm thế nào tôi có thể đạt được điều này?
Mong đợi một cái gì đó như thế này:
- Nếu nút xuất hiện bên trong vòng lặp được nhấp -> Thực hiện việc này.
- Nếu nút xuất hiện trong trang Sản phẩm đơn được nhấp -> Thực hiện điều đó.