2014-12-12 2 views
1

결제시 드롭 다운 상자에서 선택하면 수수료가 부과됩니다. 계산 된 수수료 정보를 반환하는 ajax 요청이 있으며 현재 결제 페이지도 업데이트됩니다. 하지만 주문을하면 수수료가 없어집니다. Ajax 요청 후 수수료를 추가하는 올바른 방법은 무엇입니까?주문시 WooCommerce가 add_fee를 저장하지 않습니다

내 아약스 요청 :

var data = { 
      action: 'woocommerce_update_order_review', 
      security: wc_checkout_params.update_order_review_nonce, 
      add_order_fee: '55.00', 
      post_data: $('form.checkout').serialize() 
     }; 

     $.ajax({ 
       type:  'POST', 
       url:  wc_checkout_params.ajax_url, 
       data:  data, 
       success: function(response) { 
         if (response) { 

        var order_output = $(response); 
        $('#order_review').html($.trim(response)); 
        $('body').trigger('updated_checkout'); 
        console.log(response) 
          } 

       }, 
       error: function(code){ 
        console.log('ERROR'); 
       }, 
       dataType: 'html' 
      }); 

내 플러그인 기능

add_action('woocommerce_cart_calculate_fees', 'woo_add_cart_fee'); 

function woo_add_cart_fee(){ 
global $woocommerce; 
    if(isset($_POST['add_order_fee'])) 
    { 

     $woocommerce->cart->add_fee('Same Day Shipping', '55.00', true, 'standard'); 
    } 
} 

답변

0

나는 비슷한 코드를 체크 아웃에 비용을 추가 내 플러그인 중 하나에서 실행해야합니다. 코드가 제대로 실행되는 것 같습니다. $ _POST [ 'add_order_fee'] 조건 &을 삭제했으며 주문이 접수 된 페이지뿐만 아니라 결제 페이지에서도 청구 항목을 추가했습니다. 내 플러그인에서 사용하고

$('body').trigger('updated_checkout'); 

:

jQuery("body").trigger("update_checkout"); 

공지 코드에서 'update_checkout'V/S 'updated_checkout을'

나는 한 가지를 발견했습니다. 아마 그것은 그 문제를 일으킬 수 있습니다.

0

이미 비슷한 문제가 있습니다. 첫 번째 아약스를 보내면 시스템에서 수수료를 추가하고 두 번째 아약스는 "_ update_checkout"통화로 추가하지 않습니다. $ _POST가 없기 때문입니다. 내 솔루션은 세션에 WC 수수료를 추가하고 "update_checkout"을 호출 할 때 추가합니다. 이 코드는 내 플러그인에서 사용하고 있습니다.

add_action('woocommerce_cart_calculate_fees', array($this,'calFee')); 
public function calFee() { 
    if (isset($_SESSION[ $this->id . '_cart_fees' ])) { 
     WC()->cart->fees = $_SESSION[ $this->id . '_cart_fees' ]; 
    } 
} 

session_start를 활성화해야합니다.

add_action('init', array($this,'register_my_session')); 
function register_my_session() 
    { 
     if(!session_id()) 
     { 
      session_start(); 
     } 
    } 
관련 문제