code

WooCommerce ajax 업데이트로 인해 값이 엉망이 되었습니다.

starcafe 2023. 4. 3. 21:39
반응형

WooCommerce ajax 업데이트로 인해 값이 엉망이 되었습니다.

저는 현재 WooCommerce에서 웹숍을 만들고 있으며, 이 카트는 언제든지 페이지에 접속할 수 있도록 제작되어 있으며, 카트 자체에서 제품의 수량을 업데이트할 수 있습니다.이렇게 할 때마다 몇 가지 값이 엉망이 됩니다.예를 들어, 내가 이 모든 것들을WC()->cart->total0이 반환됩니다.

그러나 체크아웃 페이지로 이동하면 올바른 카트 데이터가 모두 표시되므로 일부 정보가 부족하다고 생각됩니다.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

반응형