반응형
WooCommerce ajax 업데이트로 인해 값이 엉망이 되었습니다.
저는 현재 WooCommerce에서 웹숍을 만들고 있으며, 이 카트는 언제든지 페이지에 접속할 수 있도록 제작되어 있으며, 카트 자체에서 제품의 수량을 업데이트할 수 있습니다.이렇게 할 때마다 몇 가지 값이 엉망이 됩니다.예를 들어, 내가 이 모든 것들을WC()->cart->total
0이 반환됩니다.
그러나 체크아웃 페이지로 이동하면 올바른 카트 데이터가 모두 표시되므로 일부 정보가 부족하다고 생각됩니다.action
카트에서 뭔가를 조정하고 뛰어야 해요.내가 계속 찾아봤는데set_quantity()
이 기능을 통해 자동으로 재충전됩니다.$this->calculate_totals();
(수동으로도 변경 가능).
Ajax 함수:
public function set_quantity($direction = false, $product_id) {
$response = array();
$justOne = false;
if($_GET['data']['direction'] && $_GET['data']['product_id']) {
$direction = $_GET['data']['direction'];
$product_id = $_GET['data']['product_id'];
$justOne = true;
}
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if ($product_id == $_product->id) {
if($justOne && $direction == 'minus') {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] - 1, true);
$response['success']['quantity'] = $values['quantity'] - 1;
} else if($justOne && $direction == 'plus') {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] + 1, true);
$response['success']['quantity'] = $values['quantity'] + 1;
} else {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] + $direction, true);
}
$response['success']['line_total'] = '€ '.number_format((float)$response['success']['quantity'] * $_product->price, 2, '.', '');
$response['success']['cart_count'] = WC()->cart->get_cart_contents_count();
$response['success']['total'] = number_format((float)WC()->cart->total, 2, '.', '');
die(json_encode($response));
}
}
return false;
}
이 수정된 Ajax 함수를 사용합니다.난 이걸 시험해봤어.잘 될 거야.
수정된 Ajax 함수:
public function set_quantity($direction = false, $product_id) {
$response = array();
$justOne = false;
if($_GET['data']['direction'] && $_GET['data']['product_id']) {
$direction = $_GET['data']['direction'];
$product_id = $_GET['data']['product_id'];
$justOne = true;
}
foreach (WC()->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if ($product_id == $_product->id) {
if($justOne && $direction == 'minus') {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] - 1, true);
$response['success']['quantity'] = $values['quantity'] - 1;
} else if($justOne && $direction == 'plus') {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] + 1, true);
$response['success']['quantity'] = $values['quantity'] + 1;
} else {
WC()->cart->set_quantity($cart_item_key, $values['quantity'] + $direction, true);
}
if ( ! defined( 'WOOCOMMERCE_CART' ) ) {
define( 'WOOCOMMERCE_CART', true );
}
WC()->cart->calculate_totals();
$response['success']['line_total'] = '€ '.number_format((float)$response['success']['quantity'] * $_product->price, 2, '.', '');
$response['success']['cart_count'] = WC()->cart->get_cart_contents_count();
$response['success']['total'] = number_format((float)WC()->cart->total, 2, '.', '');
die(json_encode($response));
}
}
return false;
}
언급URL : https://stackoverflow.com/questions/39223355/woocommerce-ajax-update-messing-up-values
반응형
'code' 카테고리의 다른 글
스프링 부트 2에 TomcatEmbeddedServletContainerFactory가 없습니다. (0) | 2023.04.03 |
---|---|
각도 JS ng-반복의 첫 번째 요소 숨기기 (0) | 2023.04.03 |
요청을 사용하여 Wordpress 로그인 - Python3 (0) | 2023.04.03 |
매끄러운 회전목마 크기가 조정되지 않음 (0) | 2023.04.03 |
구텐베르크 블록에 WordPress REST API를 사용할 때 HTML 엔티티가 디코딩되지 않습니다. (0) | 2023.04.03 |