【问题标题】:Update woocommerce cart dynamically动态更新 woocommerce 购物车
【发布时间】:2019-07-24 09:11:07
【问题描述】:

在我的结帐页面上,我为产品添加了额外塑料袋的输入框(用户可以选择要添加的塑料袋数量),当用户更改数量时,我想动态更新购物车.

我在主题 script.js 上使用 ajax:

$(document).on('change', '#additionalBagsSize', function(event) {
    event.preventDefault()
    let data = {
        action : 'my_action',
        id : 1
    }
    $.post(ajaxurl, data, function(response) {
        // no response needed here
    });
})

在wordpress functions.php中:

add_action( 'wp_ajax_my_action', 'my_action_callback' );

function my_action_callback() {
    WC()->cart->total = WC()->cart->total + 1000;
    echo WC()->cart->total;
}

我也试过加个“费用”:

function my_action_callback() {
    global $woocommerce;    
    $woocommerce->cart->add_fee( 'Surcharge', 500, true, '' );
    echo WC()->cart->total;
}

添加 1000 仅用于测试目的,遗憾的是它不会更新购物车。有没有办法以编程方式控制购物车数量并实时更新以供用户查看?

【问题讨论】:

    标签: php ajax wordpress woocommerce


    【解决方案1】:

    在刷新购物车内容的 ajax 响应中添加以下行

    $(document).on('change', '#additionalBagsSize', function(event) {
        event.preventDefault()
        let data = {
            action : 'my_action',
            id : 1
        }
        $.post(ajaxurl, data, function(response) {
            jQuery(document.body).trigger('update_checkout'); //refresh the cart items and totals
        });
    })
    

    【讨论】:

    • 感谢 Pixlogix,但如何在刷新购物车内容之前更改购物车总数? WC()->cart->total = WC()->cart->total + 1000 可以执行吗?
    • 您说得对,下面这行刷新了结帐信息,但我不知道如何更改购物车金额
    【解决方案2】:

    woocommerce 购物车的总金额似乎是添加产品的数组(而不是字符串/整数),因此无法确定新的金额。

    更好的方法是通过 woocommerce 插件添加您感兴趣的自定义产品,然后使用 woocommerce 功能从购物车中添加或删除它们。

    添加:

    WC()->cart->add_to_cart($id, $count);
    

    删除:

    WC()->cart->remove_cart_item($cart_item_key);
    

    希望对大家有所帮助

    【讨论】:

      【解决方案3】:

      要添加购物车费用,请检查下面的代码,因为您必须添加某种会话,然后您必须通过这种方式检查该会话,您才能添加费用

      add_action( 'woocommerce_cart_calculate_fees', 'custom_function_checkout_fee', 20, 1 );
      
      function custom_function_checkout_fee( $cart ) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
      
        $fee = WC()->session->get( 'add_fee' );
        if(isset($fee) && $fee != 0 && is_numeric($fee)){
          $cart->add_fee( __('Option Fee', 'woocommerce'), $fee );
        }
      }
      
      
      
      add_action( 'wp_ajax_my_action', 'my_action_callback' );
      
      function my_action_callback() {
          WC()->session->set('add_fee', 500 );
      }
      

      【讨论】:

        猜你喜欢
        • 2018-07-29
        • 1970-01-01
        • 2014-01-20
        • 2018-02-17
        • 1970-01-01
        • 2016-10-09
        • 2021-04-19
        • 1970-01-01
        • 2019-08-07
        相关资源
        最近更新 更多