ajax java 插件_WooCommerce插件,通过Ajax添加变化到购物车

这个博客介绍了如何创建一个使用AJAX的购物车功能,包括添加到购物车的按钮、弹出窗口显示和关闭、购物车计数器的更新。通过jQuery事件监听和AJAX调用来实现动态添加商品,并在成功添加后更新页面上的购物车数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我创建了和AJAX添加到购物车的变量产品,如下所示:

抱歉延迟,这是扩展答案:

我包含了一个名为added-to-cart.js的新js文件,该文件包含以下代码 . 还有一些额外的代码用于处理弹出窗口并增加您可能想要删除的购物车计数器 .

/* 开始 */

jQuery(function($) {

/* event for closing the popup */

$("div.close").hover(

function() {

$('span.ecs_tooltip').show();

},

function () {

$('span.ecs_tooltip').hide();

}

);

$("div.close").click(function() {

disablePopup(); // function close pop up

})

$("a.close").click(function() {

disablePopup(); // function close pop up

});

$(this).keyup(function(event) {

if (event.which == 27) { // 27 is 'Ecs' in the keyboard

disablePopup(); // function close pop up

}

});

$("div#backgroundPopup").click(function() {

disablePopup(); // function close pop up

});

$('a.livebox').click(function() {

//alert('Hello World!');

return true;

});

setAjaxButtons(); // add to cart button ajax

function loading() {

$("div.loader").show();

}

function closeloading() {

$("div.loader").fadeOut('normal');

}

// AJAX buy button for variable products

function setAjaxButtons() {

$('.single_add_to_cart_button').click(function(e) {

var target = e.target;

loading(); // loading

e.preventDefault();

var dataset = $(e.target).closest('form');

var product_id = $(e.target).closest('form').find("input[name*='product_id']");

values = dataset.serialize();

$.ajax({

type: 'POST',

url: '?add-to-cart='+product_id.val(),

data: values,

success: function(response, textStatus, jqXHR){

loadPopup(target); // function show popup

updateCartCounter();

},

});

return false;

});

}

function updateCartCounter() {

var counter = $('.widget_shopping_cart_content').text().replace(/\s/g, '');

if (counter == '') {

$('.widget_shopping_cart_content').text("1");

}

else {

$('.widget_shopping_cart_content').text(++counter);

}

}

var popupStatus = 0; // set value

function loadPopup(target) {

var currentPopup = $(target).parents(".single_variation_wrap").find("#toPopup");

var currentBgPopup = $(target).parents(".single_variation_wrap").find("#backgroundPopup");

if(popupStatus == 0) { // if value is 0, show popup

closeloading(); // fadeout loading

currentPopup.fadeIn(0500); // fadein popup div

currentBgPopup.css("opacity", "0.7"); // css opacity, supports IE7, IE8

currentBgPopup.fadeIn(0001);

popupStatus = 1; // and set value to 1

}

}

function disablePopup() {

if(popupStatus == 1) { // if value is 1, close popup

$(".single_variation_wrap > div:nth-child(2)").fadeOut("normal");

$(".single_variation_wrap > div:nth-child(4)").fadeOut("normal");

popupStatus = 0; // and set value to 0

}

}

}); // jQuery End

so the full code would be // Store selected items in session before checkout add_action('wp_ajax_store_selected_items', 'store_selected_items'); add_action('wp_ajax_nopriv_store_selected_items', 'store_selected_items'); function store_selected_items() { check_ajax_referer('woocommerce-cart', 'security'); if (isset($_POST['selected_items'])) { WC()->session->set('selected_checkout_items', $_POST['selected_items']); wp_send_json_success(); } wp_send_json_error(); } // Filter cart contents to only include selected items during checkout add_filter('woocommerce_get_cart_contents', 'filter_cart_contents_for_checkout', 20, 1); function filter_cart_contents_for_checkout($cart_contents) { // Only on checkout page if (is_checkout() && !is_wc_endpoint_url('order-received')) { $selected_items = WC()->session->get('selected_checkout_items'); if (!empty($selected_items)) { $filtered_contents = array(); foreach ($cart_contents as $key => $item) { if (in_array($key, $selected_items)) { $filtered_contents[$key] = $item; } } return $filtered_contents; } } return $cart_contents; } // 修改原 remove_selected_items_after_checkout 函数 function remove_selected_items_after_checkout($order_id) { $selected_items = WC()->session->get('selected_checkout_items'); if (!empty($selected_items)) { foreach ($selected_items as $cart_item_key) { WC()->cart->remove_cart_item($cart_item_key); } // 清除会话数据(关键!) WC()->session->__unset('selected_checkout_items'); // 手动触发购物车更新(确保未选中商品保留) WC()->cart->calculate_totals(); } } // Clear session data WC()->session->__unset('selected_checkout_items'); // AJAX remove selected items add_action('wp_ajax_remove_selected_cart_items', 'remove_selected_cart_items'); add_action('wp_ajax_nopriv_remove_selected_cart_items', 'remove_selected_cart_items'); function remove_selected_cart_items() { check_ajax_referer('woocommerce-cart', 'security'); if (isset($_POST['selected_items'])) { foreach ($_POST['selected_items'] as $cart_item_key) { WC()->cart->remove_cart_item(sanitize_text_field($cart_item_key)); } wp_send_json_success(); } wp_send_json_error(); } // Clear entire cart add_action('wp_ajax_clear_entire_cart', 'clear_entire_cart'); add_action('wp_ajax_nopriv_clear_entire_cart', 'clear_entire_cart'); function clear_entire_cart() { check_ajax_referer('woocommerce-cart', 'security'); WC()->cart->empty_cart(); wp_send_json_success(); } // Remove cart totals section add_action('template_redirect', 'remove_cart_totals_section'); function remove_cart_totals_section() { if (is_cart()) { remove_action('woocommerce_cart_collaterals', 'woocommerce_cart_totals', 10); } } // Enqueue necessary scripts add_action('wp_enqueue_scripts', 'partial_checkout_scripts'); function partial_checkout_scripts() { if (is_cart()) { wp_localize_script('wc-cart', 'wc_cart_params', array( 'ajax_url' => admin_url('admin-ajax.php'), 'cart_nonce' => wp_create_nonce('woocommerce-cart') )); } } // Restore original cart if checkout is abandoned add_action('template_redirect', 'restore_original_cart_if_abandoned'); function restore_original_cart_if_abandoned() { if (is_cart() && WC()->session->get('selected_checkout_items')) { // Clear the session to prevent filtering on next checkout attempt WC()->session->__unset('selected_checkout_items'); } } add_action('woocommerce_init', 'override_woocommerce_cart'); function override_woocommerce_cart() { if (!class_exists('WC_Cart') || !WC()->session) return; // 关键修复:检查 session 是否存在 class WC_Cart_Custom extends WC_Cart { public function empty_cart($force_session = false) { // 安全检查:确保 session 已初始化 if (WC()->session && WC()->session->get('selected_checkout_items')) { return; } parent::empty_cart($force_session); } } // 替换全局 cart 实例 $GLOBALS['woocommerce']->cart = new WC_Cart_Custom(); } correct?
最新发布
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值