我创建了一个自定义短代码来显示客户购物车中特定产品的当前数量。该短代码效果很好,但仅在刷新页面时更新。我正在尝试让它与 AJAX 一起工作。
我知道这里有很多与 WooCommerce AJAX 和 add_to_cart_fragments 过滤器挂钩相关的问题,但到目前为止我无法找到获取简单短代码(或放置短代码的容器)的解决方案AJAX 更新。
这是我目前拥有的代码,但我仍然是一个新手,我使用 woocommerce_add_to_cart_fragments 的方式一定做错了什么。任何帮助将不胜感激!
// Create the shortcode
if( ! function_exists('get_product_quantity_in_cart') ) {
function get_product_quantity_in_cart( $atts ) {
// Extract shortcode attributes
extract( shortcode_atts( array(
'id' => '',
), $atts, 'cart_qty_badge' ) );
if( empty($id) || WC()->cart->is_empty() ) return;
$total_qty = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
if( $cart_item['product_id'] == $id ) {
$total_qty += $cart_item['quantity'];
}
}
return $total_qty > 0 ? $total_qty : '';
}
add_shortcode( 'cart_qty_badge', 'get_product_quantity_in_cart' );
}
// Refresh shortcode on AJAX add-to-cart
add_filter( 'woocommerce_add_to_cart_fragments', 'refresh_cart_count' );
function refresh_cart_count ( $fragments ){
$fragments['#cart_qty_badge'] = get_product_quantity_in_cart();
return $fragments;
}
它无法工作,因为您的特定产品 ID 缺失于:
$fragments['#cart_qty_badge'] = get_product_quantity_in_cart();
您需要使用
do_shortcode()
函数和包含特定产品 ID 的 id
参数的完整短代码,将该行替换为以下内容,例如:
$fragments['#cart_qty_badge'] = do_shortcode('[cart_qty_badge id="23"]');
其中
23
是您的目标特定产品 ID...