전자 상거래 상점에서 :
홈페이지에 항목이 표시되며 각 항목 아래에 "장바구니에 추가"버튼이 있습니다. 이 버튼을 클릭하면 항목이 장바구니에 추가됩니다. 이 버튼을 다시 클릭하면 장바구니에 이미 존재하는 품목의 수량이 1 씩 증가합니다. 이것이 루프라고 생각합니다 . 여태까지는 그런대로 잘됐다.
단일 제품 페이지에는 "장바구니에 추가"버튼이 있습니다. 이 버튼을 클릭하면 항목이 장바구니에 추가됩니다. 수량을 변경하는 데 사용할 수있는 수량 입력 텍스트 상자도 있습니다. 이것도 괜찮습니다.
문제:
루프 내에서 클릭 한 "장바구니에 추가"버튼 (현재 홈페이지에서는 있지만 아카이브 페이지와 같은 다른 페이지에서도 사용 가능)과 클릭 한 "카트에 추가"버튼 을 구별해야합니다 . 단일 제품 페이지에서 이 차별화를 기반으로 내가해야 할 일은 다음과 같습니다.
- 루프 내에 나타나는 "장바구니에 추가"버튼을 클릭 한 경우을 사용하여 카트에 이미 존재하는이 품목 의 수량 을 잡고
$cart_item_key
1 씩 증가시킨 후 추가 처리를 수행하고 세부 사항을 저장하는 사용자 정의 기능으로 보내십시오. 다시 장바구니에 넣습니다. - 단일 제품 페이지에 나타나는 "장바구니에 추가"버튼을 클릭 한 경우을 사용하여 카트에 이미 존재하는이 품목 의 수량
$cart_item_key
에 3을 곱한 다음 추가 처리 및 저장을 수행하는 사용자 정의 함수로 보내십시오. 다시 장바구니에 담기 - 위의 두 경우 모두 서로 다른 논리에 따라 수량이 변경되고 있으며이 수량을 사용자 정의 함수 호출로 보내야합니다.
내가 시도한 것 :
다음 코드를 시도했습니다.
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...
논리 가없는 상태에서 실행됩니다 .
따라서 루프에있는 "장바구니에 추가"버튼을 클릭하면 (홈페이지, 아카이브 등 위치에 관계없이) "장바구니에 추가"버튼을 클릭하면 다른 코드를 실행하고 싶습니다. 단일 제품 페이지에있는를 클릭하십시오. 어떻게하면 되나요?
다음과 같은 것을 기대하십시오.
- 루프 안에 나타나는 버튼을 클릭하면->이 작업을 수행하십시오.
- 단일 제품 페이지에 나타나는 버튼을 클릭하면-> 그렇게하십시오.