gpt4 book ai didi

javascript - 使用 AJAX - WooCommerce API 向购物车添加变体?

转载 作者:可可西里 更新时间:2023-11-01 02:15:33 25 4
gpt4 key购买 nike

我有一个包含以下数据的项目:

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 url 传递给您的脚本:

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 个变量。完全未经测试,但我希望它有所帮助。

关于javascript - 使用 AJAX - WooCommerce API 向购物车添加变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27270880/

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