2017-10-15 13 views
1

商品の数量が変更されたときに自動的にカートを更新する機能が見つかりました.WooCommerceの3.2.0が更新されるまで機能していました(最新のアップデート3.2.1)。WooCommerce Ajaxカートの更新が停止しました

add_action('woocommerce_cart_updated', 'wac_update'); 
function wac_update() { 
    // is_wac_ajax: flag defined on wooajaxcart.js 

    if (!empty($_POST['is_wac_ajax'])) { 
     $resp = array(); 
     $resp['update_label'] = __('Update Cart', 'woocommerce'); 
     $resp['price'] = 0; 

     // render the cart totals (cart-totals.php) 
     ob_start(); 
     do_action('woocommerce_after_cart_table'); 
     do_action('woocommerce_cart_collaterals'); 
     do_action('woocommerce_after_cart'); 
     $resp['html'] = ob_get_clean(); 

     // calculate the item price 
     if (!empty($_POST['cart_item_key'])) { 
      $items = WC()->cart->get_cart(); 
      $cart_item_key = $_POST['cart_item_key']; 

      if (array_key_exists($cart_item_key, $items)) { 
       $cart_item = $items[$cart_item_key]; 
       $_product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key); 
       $price = apply_filters('woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal($_product, $cart_item['quantity']), $cart_item, $cart_item_key); 
       $resp['price'] = $price; 
      } 
     } 

     echo json_encode($resp); 
     exit; 
    } 
} 

マイJavascriptがまだ作業が、ここで、それは参考のためにある:私はこのコード内で変更何かかなり確信している私は、変更ログ、https://github.com/woocommerce/woocommerce/blob/master/CHANGELOG.txtを通して見てきた

function refreshCart() { 
    jQuery('.cart-builder .qty').on('change', function(){ 
     var form = jQuery(this).closest('form'); 

     // emulates button Update cart click 
     jQuery("<input type='hidden' name='update_cart' id='update_cart' value='1'>").appendTo(form); 

     // plugin flag 
     jQuery("<input type='hidden' name='is_wac_ajax' id='is_wac_ajax' value='1'>").appendTo(form); 

     var el_qty = jQuery(this); 
     var matches = jQuery(this).attr('name').match(/cart\[(\w+)\]/); 
     var cart_item_key = matches[1]; 
     form.append(jQuery("<input type='hidden' name='cart_item_key' id='cart_item_key'>").val(cart_item_key)); 

     // get the form data before disable button... 
     var formData = form.serialize(); 

     jQuery("input[name='update_cart']").val('Updating...').prop('disabled', true); 

     jQuery.post(form.attr('action'), formData, function(resp) { 
       // ajax response 
       jQuery('.cart-collaterals').html(resp.html); 

       el_qty.closest('.cart_item').find('.product-subtotal').html(resp.price); 

       console.log(resp.test); 

       jQuery('#update_cart').remove(); 
       jQuery('#is_wac_ajax').remove(); 
       jQuery('#cart_item_key').remove(); 

       jQuery("input[name='update_cart']").val(resp.update_label).prop('disabled', false); 
      }, 
      'json' 
     ); 
    }); 
} 

が、私は今、矛盾しているものを見つけることができません。私が言ったように、それはこの更新される前に完全に働いていた。

+0

コンソールにJavaScriptエラーが表示されていませんか? –

+0

エラーはありません。それぞれの応答をコンソールログに追加し、すべてのプロパティに作業プロパティが追加されました。それはちょうど価格が更新されていないようだ –

+0

これはカートのページには正しいですか?私は今それを探しています... –

答えて

0

ここでは簡単な解決策ですが、私はカートページの一番下にスクリプトを追加するだけですが、wp_enqueue_script機能でエンキューすることも可能です。それはすべて、カートの更新ボタンの押下をシミュレートします。

function cart_update_qty_script() { 
    if (is_cart()) : 
     ?> 
     <script type="text/javascript"> 
      (function($){ 
       $(function(){ 
        $('div.woocommerce').on('change', '.qty', function(){ 
         $("[name='update_cart']").trigger('click'); 
        }); 
       }); 
      })(jQuery); 
     </script> 
     <?php 
    endif; 
} 

add_action('wp_footer', 'cart_update_qty_script'); 
+0

使用しているカートテンプレートが実際のカートページではなくウィジェットであるため、このソリューションを使用したくありません。このようにすると、Ajaxの代わりにリフレッシュがトリガーされます。 –

関連する問題