在Woocommerce中使用Ajax刷新自定义迷你购物车的数量和内容
在Woocommerce中使用Ajax刷新自定义迷你购物车的数量和内容
我正在尝试制作自定义的迷你购物车。在删除商品后,购物车应该在不刷新页面的情况下进行更新(使用ajax),但实际情况并非如此,我在前端上看到无限加载,只有在页面刷新后才能看到更改。
我的迷你购物车动作:
function my_wc_mini_cart() { if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { $count = WC()->cart->cart_contents_count; $cart = WC()->cart->get_cart(); ?> $cart_item ): $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_widget_cart_item_visible', true, $cart_item, $cart_item_key ) ) { $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ); $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key ); $product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); $variation_val = $cart_item['variation']['attribute_pa_size']; $term_obj = get_term_by('slug', $variation_val, 'pa_size'); $size_name = $term_obj->name; ?> "> ×', esc_url( wc_get_cart_remove_url( $cart_item_key ) ), __( '删除此商品', 'woocommerce' ), esc_attr( $product_id ), esc_attr( $cart_item_key ), esc_attr( $_product->get_sku() ) ), $cart_item_key ); ?>
使用ajax更新购物车的动作,可能是我使用了错误的钩子...
function my_header_add_to_cart_fragment( $fragments ) { ob_start(); $count = WC()->cart->cart_contents_count; $cart = WC()->cart->get_cart(); ?> $cart_item ): $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_widget_cart_item_visible', true, $cart_item, $cart_item_key ) ) { $product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ); $thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key ); $product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key ); $variation_val = $cart_item['variation']['attribute_pa_size']; $term_obj = get_term_by('slug', $variation_val, 'pa_size'); $size_name = $term_obj->name; ?> "> ×', esc_url( wc_get_cart_remove_url( $cart_item_key ) ), __( '删除此商品', 'woocommerce' ), esc_attr( $product_id ), esc_attr( $cart_item_key ), esc_attr( $_product->get_sku() ) ), $cart_item_key ); ?>
寻求建议和帮助。
更新:将
$fragments['a.cart-contents'] = ob_get_clean();
更改为$fragments['div.widget_shopping_cart_content'] = ob_get_clean();
以返回正确的片段(而不是像屏幕截图中那样两个),但没有帮助