WooCommerce 购物车更改后更新简码显示

Update shortcode display once WooCommerce cart change

我正在尝试向我的网站添加倒计时 header,直到启用免费送货。

这是我的代码:

if ( ! function_exists( 'setup_free_shipping_counter' ) ) {
    function setup_free_shipping_counter() {
        ob_start();
            ?>
                /* ... */
                <p class="label-active"><span><?php echo get_shipping_cost_progress() ?></span> till free shipping</p>
                /* ... */
            <?php
        return ob_get_clean();
    }
}
add_shortcode('myshortcode', 'setup_free_shipping_counter');

function get_shipping_cost_progress() {
    $min_amount = 50;
    $current = WC()->cart->subtotal;
    $progress = wc_price( $min_amount - $current );

    return $progress;
}

问题是在购物车上 Ajax 事件,例如 Ajax 添加到购物车,从购物车中删除商品,更改购物车商品数量,进度没有更新。

如何让我的简码在 woocommerce Ajax 购物车活动中得到更新?

如果我重新加载页面然后 Shortcode 显示正确的进度,但我需要让它在购物车 Ajax 事件上动态更新。

您需要使用专用的 woocommerce_add_to_cart_fragments 操作挂钩(Ajax 供电),以便在购物车根据 Ajax 请求发生变化时刷新您的自定义进度计数。

我稍微重新访问了您的代码(更改显示,启用免费送货时)

// Shortcode: [fs_progress]
function display_free_shipping_progress() {
    return get_free_shipping_progress();
}
add_shortcode('fs_progress', 'display_free_shipping_progress');
    
// Function that makes calculations and display
function get_free_shipping_progress() {
    $min_amount = 100; // Set the min amount to get free shipping

    $prodgress = $min_amount - WC()->cart->subtotal;

    if( $prodgress >= 0 ) {
        return '<p id="fs-progress" class="label-active"><span>' . wc_price( $prodgress ) . '</span> '. __("till free shipping") .'</p>';
    } else {
        return '<p id="fs-progress" class="label-active">'. __("Free shipping is enabled!") .'</p>';
    }
}

// Refreshing "free shipping" progress on cart ajax events
add_filter( 'woocommerce_add_to_cart_fragments', 'refresh_free_shipping_progress' );
function refresh_free_shipping_progress( $fragments ){
    $fragments['#fs-progress'] = get_free_shipping_progress();

    return $fragments;
}

代码进入您的活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

短代码用法: [fs_progress] 或 php 代码:echo do_shortcode( '[fs_progress]' );


相关: