gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:19:52 25 4
gpt4 key购买 nike

我已经组装了链接以将可变产品添加到我的购物车,但我不知道如何在不重新加载页面的情况下“刷新”购物车。我的猜测是我没有正确地使这个 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();
});

如果有人能给我指出正确的方向,我将不胜感激。变量/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 是我应用于添加到购物车链接的所有可变项目的类。

JS

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);
});

}

});

});

扩展的 WC Action (放在 functions.php 中)

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();
}

然后 - 关键 - WC_AJAX::get_refreshed_fragments 调用您更新购物车的关键 woocommerce_header_add_to_cart_fragment 函数。我的购物车在单独的 PHP 文件中模块化。

只需确保 $fragments[xxx] 中的“xxx”与您的购物车代码的容器相匹配。

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' );

关于php - 通过 AJAX 添加可变产品后更新 WooCommerce 购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com