WooCommerce - 在Ajax更新后计算购物车总数

时间:2016-06-28 15:17:53

标签: php ajax wordpress woocommerce

我有一小部分代码可以计算购物车总额(不含税),并且如果购物车总额低于50美元,则输出免费送货加售。

// Shipping Upsell
/**
 * Checks the cart for the Total excluding taxes
 * @param $total_required
 * @return bool
 */
function qualifies_basedon_cart_total( $total_required ) {
    /*
     * We only want to run this on the cart or checkout page
     * If the cart subtotal is less than $total_required for free shipping, return true
     */
if( is_cart() || is_checkout () ) {
    if( WC()->cart->subtotal_ex_tax < $total_required ) {
        return true;
    }
}
// do nothing
return false;
}

function shipup(){
    // tests if total is below $50 and displays upsell if query returns ture
    if( qualifies_basedon_cart_total( 50 ) ) {
    echo "<div class =\"shipup\"><h3>Free Shipping</h3>\n<p>Get free shipping on all orders over $50!</p></div>";
    }
}

add_action ('woocommerce_cart_collaterals','shipup', 1);

上面的代码在初始页面加载时效果很好,但是在更改购物车页面上的数量并选择“更新购物车”后,我上面的代码(在functions.php中)不会根据新的购物车总数自行调整。 enter image description here

我相信更新购物车按钮使用AJAX,我的代码无法使用它。如何根据动态购物车总数AJAXIFY我的代码?

2 个答案:

答案 0 :(得分:1)

<?php

/* Update cart total on quantity change */

function cart_select_change_js() {
?>
    <script type="text/javascript">
        jQuery(document).ready(function($){
            $(".product-quantity .quantity_select select.qty").change(function(){
                $("section.entry .woocommerce").append('<div style="display:none" class="blockUI"></div>');
                $("section.entry .woocommerce").append('<div style="z-index: 1000; border: medium none; margin: 0px; padding: 0px; width: 100%; height: 100%; top: 0px; left: 0px; background: url(&quot;/wp-content/plugins/woocommerce/assets/images/ajax-loader@2x.gif&quot;) no-repeat scroll center center / 16px 16px rgb(255, 255, 255); opacity: 0.6; cursor: wait; position: absolute;" class="blockUI blockOverlay"></div>');
                $(".actions input.button").click();
            });
        });
    </script>
<?php
}
add_action('woocommerce_after_cart', 'cart_select_change_js', 10);
?>

试试此代码段

答案 1 :(得分:0)

如果您正在使用WooCommerce 2.6及更高版本,WC已经创建了一种方法,无需额外的代码即可。

您需要设置&#34; Shipping Zones&#34;在&#34; WooCommerce&#34; - &GT; &#34;设置&#34; - &GT; &#34;送货&#34; - &GT; &#34;运输区&#34;。

例如,我有&#34;本地&#34;和#34;美国&#34;运输区。

  1. 对于&#34;美国&#34;运输区,然后我创建了一个&#34;运输方法&#34; (单击区域以添加送货方式,然后单击标题为&#34的灰色按钮;添加送货方式&#34;)。
  2. 选择&#34;免费送货&#34;方法并点击&#34;添加送货方式&#34;。
  3. 然后点击&#34;设置&#34;根据&#34;免费送货&#34;方法。
  4. 此时,您可以选择设置免费送货方式的时间。使用下拉菜单&#34;免费送货需要......&#34;并选择&#34;最低订单金额&#34;并键入&#34; 50&#34;在&#34;最低订单金额&#34;领域。
  5. 然后点击&#34;保存更改&#34;。
  6. 现在购物车的总价为50美元或以上,即可免费送货。