通过AJAX添加可变产品后更新WooCommerce购物车

我已经组装好了将链接添加到购物车中的可变产品的链接,就像这样,但是我对如何“刷新”购物车而不重新加载页面感到困惑。我的猜测是,我没有正确地向购物车请求中添加此AJAX,因此未调用woocommerce_add_to_cart_fragments(我相信我的购物车HTML会在此处放置刷新)。

$addToCartLink = '?add-to-cart=' . $prod->id . '&variation_id=' . $var_id . '&attribute_pa_quantity-attribute=' . $var_quantity;

jQuery.get($addToCartLink, function() {

//refreshCart();

});

如果有人能指出我正确的方向,我将不胜感激。Variable / AJAX / WooCommerce文档似乎相当稀疏​​。

回答:

@helgatheviking-谢谢,我在发贴后几个小时发现了它。这也提供了巨大的帮助https://github.com/wp-

plugins/woocommerce-ajax-add-to-cart-for-variable-products/blob/master/js/add-

to-cart-variation.js。

这是我完成的解决方案,以防万一。

我将var_id和product_id存储为数据属性和数量,并且在这种情况下将var_name硬编码。.doodleVarButton是我应用于所有添加到购物车链接的可变项的类。

jQuery( function( $ ) {

$( document ).on( 'click', '.doodleVarButton', function() {

var var_id = $(this).data("varid");

var product_id = $(this).data("prodid");

var data = {

action: 'woocommerce_add_to_cart_variable_rc',

product_id: product_id,

quantity: 1,

variation_id: var_id,

variation: 'quantity-attribute'

};

jQuery.post( woocommerce_params.ajax_url, data, function( response ) {

var fragments = response.fragments;

if ( fragments ) {

$.each(fragments, function(key, value) {

$(key).replaceWith(value);

});

}

});

});

add_action( 'wp_ajax_woocommerce_add_to_cart_variable_rc','woocommerce_add_to_cart_variable_rc_callback' );

function woocommerce_add_to_cart_variable_rc_callback() {

$product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $_POST['product_id'] ) );

$quantity = empty( $_POST['quantity'] ) ? 1 : apply_filters( 'woocommerce_stock_amount', $_POST['quantity'] );

$variation_id = $_POST['variation_id'];

$variation = $_POST['variation'];

$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );

if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variation ) ) {

do_action( 'woocommerce_ajax_added_to_cart', $product_id );

if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) {

wc_add_to_cart_message( $product_id );

}

WC_AJAX::get_refreshed_fragments();

} else {

//$this->json_headers();

header('Content-Type: application/json');

$data = array(

'error' => true,

'product_url' => apply_filters( 'woocommerce_cart_redirect_after_error', get_permalink( $product_id ), $product_id )

);

echo json_encode( $data );

}

die();

}

然后-键 ,您

在其中更新购物车。我的购物车被模块化在一个单独的PHP文件中。

function woocommerce_header_add_to_cart_fragment( $fragments ) {

ob_start();

include( dirname(__FILE__) . "/../views/checkout-bar.php");

$fragments['div.checkout'] = ob_get_clean();

return $fragments;

}

add_filter( 'woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment' );

以上是 通过AJAX添加可变产品后更新WooCommerce购物车 的全部内容, 来源链接: utcz.com/qa/410290.html

回到顶部