ajax和js编写购物车,使用AJAX向购物车添加变化-WooCommerce API?

本文详细介绍了如何在WooCommerce中使用Ajax将商品和变体添加到购物车的过程。涉及到的关键代码段包括在`class-wc-ajax.php`中的回调函数,以及前端`add-to-cart.js`中的Ajax调用。文章还提供了添加变体的示例代码,指导开发者如何调整现有代码以实现这一功能。
摘要由CSDN通过智能技术生成

小编典典

您可以直接在代码中调查WooCommerce如何通过Ajax将商品添加到购物车中includes/class-wc-

ajax.php。回调位于。WooCommerce已经在产品“循环”(产品档案)上执行了此操作,因此我认为您不需要重新发明轮子,并且如果它们的现有代码对您要执行的操作无效,那么您应该可以借用从中

该文件的开头具有所有WooCommerce Ajax操作的循环,但是我们可以追踪到添加到购物车基本上是这样的:

add_action( 'wp_ajax_nopriv_woocommerce_add_to_cart', array( 'WC_AJAX', 'add_to_cart' ) );

它的回调距离文件更远:

/**

* AJAX add to cart

*/

public static function add_to_cart() {

ob_start();

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

$quantity = empty( $_POST['quantity'] ) ? 1 : wc_stock_amount( $_POST['quantity'] );

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

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

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

}

// Return fragments

self::get_refreshed_fragments();

} else {

// If there was an error adding to the cart, redirect to the product page to show any errors

$data = array(

'error' => true,

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

);

wp_send_json( $data );

}

die();

}

如果要查看其添加到购物车ajax调用,则该JS位于assest/js/frontend/add-to-cart.js。

编辑

现在,我知道您正在寻找添加变体的方法, 也许 我们可以对以上内容进行调整。

首先,我认为您需要将AJAX网址传递给脚本:

wp_enqueue_script( 'wc-variation-add-to-cart', 'source-to-script/your-script.js' );

$vars = array( 'ajax_url' => admin_url( 'admin-ajax.php' ) );

wp_localize_script( 'wc-variation-add-to-cart', 'WC_VARIATION_ADD_TO_CART', $vars );

然后,您的AJAX调用将如下所示:

jQuery.ajax({

url: WC_VARIATION_ADD_TO_CART.ajax_url,

data: {

"action" : "woocommerce_add_variation_to_cart",

"product_id" : "124",

"variation_id" : "125",

"quantity" : 1,

"variation" : {

"size" : "xl",

"color": "pink"

},

},

type: "POST"

});

基本上,要添加特定的变体,除了所有特定选项外,还需要变体的ID。

最后,针对woocommerce_add_variation_to_cartajax操作的新回调将遵循以下内容:

add_action( 'wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'so_27270880_add_variation_to_cart' );

function so_27270880_add_variation_to_cart() {

ob_start();

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

$quantity = empty( $_POST['quantity'] ) ? 1 : wc_stock_amount( $_POST['quantity'] );

$variation_id = isset( $_POST['variation_id'] ) ? absint( $_POST['variation_id'] ) : '';

$variations = ! empty( $_POST['variation'] ) ? (array) $_POST['variation'] : '';

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

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

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

}

// Return fragments

WC_AJAX::get_refreshed_fragments();

} else {

// If there was an error adding to the cart, redirect to the product page to show any errors

$data = array(

'error' => true,

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

);

wp_send_json( $data );

}

die();

}

通常,我只是复制WooCommerce的方法,并添加添加变体所需的2个变量。完全未经测试,但希望对您有所帮助。

2020-07-26

package shoppingcart.biz; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * 购物车 */ public class ShoppingCart { private Map cartMap = null; //保存Product的Map /** * 购物车构造函数 */ public ShoppingCart(){ cartMap = new HashMap(); } /** * 取得存放产品的cartMap */ public Map getCartMap(){ return this.cartMap; } /** * 向购物车添加产品 */ public boolean addProduct(String productId){ if(existProduct(productId)){ // 产品已存在则增加数量 Product product = cartMap.get(productId); product.setProductNum(product.getProductNum() + 1); return true; } else{ // 否则新加入该产品 Product product = new Product(productId); if(product.getProductId()==null){ return false; // 数据库中无该产品 }else{ cartMap.put(productId, product); return false; } } } /** * 检查购物车里是否已存在该产品 */ public boolean existProduct(String productId){ Iterator hmkey = cartMap.keySet().iterator(); while(hmkey.hasNext()){ String pid = hmkey.next(); if(pid.equals(productId)){ return true; } } return false; } /** * 从购物车中移除指定产品 */ public void delProduct(String productId){ cartMap.remove(productId); } /** * 获取购物车产品数量 */ public int getProductNum(){ int productNum = 0; Iterator hmEntry = cartMap.values().iterator(); while(hmEntry.hasNext()){ productNum += hmEntry.next().getProductNum(); } return productNum; } /** * 统计购物车商品总价 */ public double getTotalprice(){ double totalPrice = 0.0; Iterator hmkey = cartMap.keySet().iterator(); Product product = null; while(hmkey.hasNext()){ product = cartMap.get(hmkey.next()); totalPrice += product.getProductPirce() * product.getProductNum(); } return totalPrice; } /** * 清空购物车 */ public void clearCart(){ cartMap.clear(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值