我有一个包含以下数据的项目:
var item = {
id : "124",
name : "xxx",
price : "13.13",
quantity : 1,
options : {
"size" : "xl",
"color": "pink"
}
};
当用户单击“添加到购物车”时,我想使用WC API发出Ajax请求并将上述项目添加到购物车。
jQuery.ajax({
url: "some/woocommerce/api/add/to/cart/request/path",
data: item,
type: "POST"
});
然后,我想在购物车页面上使用WC API发出另一个Ajax请求并检索购物车的内容。
我还没有从客户端使用Javascript找到任何文档(正式或非正式)。
有谁知道并且可以给我提供一个例子吗?
另外,有谁知道为什么WooCommerce Api文档如此恐怖(缺少有关上述明显/标准问题的任何信息)。我正在认真考虑让我们的公司改用Shopify。
您可以直接在代码中调查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_cart
ajax操作的新回调将遵循以下内容:
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个变量。完全未经测试,但希望对您有所帮助。
在商品分类页面上,当有人点击“添加到购物车”时,WooCommerce通过Ajax在此按钮下方添加“查看购物车”。我发现处理这个的脚本是 /assets/js/frontend/add-to-cart.js 现在,我想添加"Procceed to check out",这样某人就可以立即去结账。 这是脚本的输出: 有没有人做过类似的事情?
目标:在一个按钮点击中添加多个可变产品到购物车。 我试着将这段代码放入循环中,但它不起作用。 但是这种方法不能解决问题,因为我需要在一个按钮点击中添加几个产品变体。 所有的建议都将不胜感激。多谢了。
我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。 在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。 当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方
我的php通过echo在最后创建每个产品是 网站上通常动态创建10个产品 所以我为php显示的每个产品都有10个具有相同类或id的按钮 任何关于函数通过post(jquery)将数据发送到cart.php文件而不刷新网站的想法。我必须在$_POST中发送正确的产品id,以便cart.php知道添加了什么。 为什么当我加上 它正在工作,只警告第一个按钮添加到购物车,而不是全部 我是jQuery的新手
问题内容: 我已经组装好了将链接添加到购物车中的可变产品的链接,就像这样,但是我对如何“刷新”购物车而不重新加载页面感到困惑。我的猜测是,我没有正确地向购物车请求中添加此AJAX,因此未调用woocommerce_add_to_cart_fragments(我相信我的购物车HTML会在此处放置刷新)。 如果有人能指出我正确的方向,我将不胜感激。Variable / AJAX / WooCommer
我已经组装了一个链接,像这样将一个可变产品添加到我的购物车,但是我不知道如何在不重新加载页面的情况下“刷新”购物车。我的猜测是,我没有正确地将此AJAX添加到购物车请求,因此,woocommerce_add_to_cart_fragments(我相信我的购物车超文本标记语言将被放置以供刷新)没有被调用。 如果有人能给我指出正确的方向,我将不胜感激。Variable/AJAX/WooCommerce