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]' );
相关:
我正在尝试向我的网站添加倒计时 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]' );
相关: