自定义添加到购物车按钮以将多个产品添加到购物车中:woocommerce
Posted
技术标签:
【中文标题】自定义添加到购物车按钮以将多个产品添加到购物车中:woocommerce【英文标题】:Custom add to cart button to add multiple product into cart with quantity :woocommerce 【发布时间】:2015-12-04 22:34:11 【问题描述】:我想创建自定义添加到购物车按钮,将我的 3 个产品添加到购物车中,每个产品有 2 个数量..
为了将三个产品添加到购物车中,我已经这样做了:
<a id="buy" class="single_add_to_cart_button shop-skin-btn shop-flat-btn alt" href="#">ADD MY PRODUCT</a>
$p_id = 我的产品 ID 例如:45,99,152
<script>
jQuery('#buy').click(function(e)
e.preventDefault();
var myStringArray = [<?php echo $p_id; ?>];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++)
addToCart(myStringArray[i]);
return true;
);
function addToCart(p_id)
$.get('/glassful/?post_type=product&add-to-cart=' + p_id, function()
$(".show_success").show();
);
</script>
它将我的结果产品添加到购物车中,但只有 1 个数量 请告诉我如何添加数量?我想为每种产品添加 2 个数量。
意味着当点击添加到购物车时,三个产品将添加到购物车中,每个产品有 2 个数量。
提前感谢您的帮助..
【问题讨论】:
【参考方案1】:将产品ID保存在数组中并发出ajax请求
jQuery("#addSelected").click(function() var arrayLength =
arrayOfAddedProducts.length; jQuery.ajax(
type: "POST",
url: ajaxurl,
data: action : 'add_item_from_cart','getIDtoAdd' : arrayOfAddedProducts,
success: function (res)
wc_load_all_products();
); );
函数.php
function add_item_from_cart()
foreach ($_POST['getIDtoAdd'] as $productId)
WC()->cart->add_to_cart( intval($productId), 1, 0, array(), array() );
// WC()->cart->add_to_cart( $product_id = 0, $quantity = 1, $variation_id = 0, $variation = array(), $cart_item_data = array() );
add_action('wp_ajax_add_item_from_cart', 'add_item_from_cart');
add_action('wp_ajax_nopriv_add_item_from_cart', 'add_item_from_cart');
【讨论】:
一次添加多个产品的原始方式。谢谢【参考方案2】:请检查此链接,这对我有用:)
WooCommerce: Allow adding multiple products to the cart via the add-to-cart query string
functions.php
function woocommerce_maybe_add_multiple_products_to_cart()
// Make sure WC is installed, and add-to-cart qauery arg exists, and contains at least one comma.
if ( ! class_exists( 'WC_Form_Handler' ) || empty( $_REQUEST['add-to-cart'] ) || false === strpos( $_REQUEST['add-to-cart'], ',' ) )
return;
// Remove WooCommerce's hook, as it's useless (doesn't handle multiple products).
remove_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 );
$product_ids = explode( ',', $_REQUEST['add-to-cart'] );
$count = count( $product_ids );
$number = 0;
foreach ( $product_ids as $product_id )
if ( ++$number === $count )
// Ok, final item, let's send it back to woocommerce's add_to_cart_action method for handling.
$_REQUEST['add-to-cart'] = $product_id;
return WC_Form_Handler::add_to_cart_action();
$product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $product_id ) );
$was_added_to_cart = false;
$adding_to_cart = wc_get_product( $product_id );
if ( ! $adding_to_cart )
continue;
$add_to_cart_handler = apply_filters( 'woocommerce_add_to_cart_handler', $adding_to_cart->product_type, $adding_to_cart );
/*
* Sorry.. if you want non-simple products, you're on your own.
*
* Related: WooCommerce has set the following methods as private:
* WC_Form_Handler::add_to_cart_handler_variable(),
* WC_Form_Handler::add_to_cart_handler_grouped(),
* WC_Form_Handler::add_to_cart_handler_simple()
*
* Why you gotta be like that WooCommerce?
*/
if ( 'simple' !== $add_to_cart_handler )
continue;
// For now, quantity applies to all products.. This could be changed easily enough, but I didn't need this feature.
$quantity = empty( $_REQUEST['quantity'] ) ? 1 : wc_stock_amount( $_REQUEST['quantity'] );
$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity );
if ( $passed_validation && false !== WC()->cart->add_to_cart( $product_id, $quantity ) )
wc_add_to_cart_message( array( $product_id => $quantity ), true );
// Fire before the WC_Form_Handler::add_to_cart_action callback.
add_action( 'wp_loaded', 'woocommerce_maybe_add_multiple_products_to_cart', 15 );
你可以使用你的链接。
$product_ids = implode( ',', array( 1, 2, 55 ) );
$url = esc_url_raw( add_query_arg( 'add-to-cart', $product_ids, wc_get_checkout_url() ) );
谢谢!
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @JFMeier 谢谢,我会在这里添加脚本:)【参考方案3】:您需要在查询字符串中传递数量,例如:
?post_type=product&add-to-cart=100&quantity=2
我已经修改了你的代码
<script>
jQuery('#buy').click(function(e)
e.preventDefault();
var myStringArray = [<?php echo $p_id; ?>];
var arrayLength = myStringArray.length;
for (var i = 0; i < arrayLength; i++)
addToCart(myStringArray[i],2);
return true;
//window.location.href = "http://seoexpertiser.ca/glassful/cart/";
);
function addToCart(p_id,qu)
$.get('/glassful/?post_type=product&add-to-cart=' + p_id +'&quantity='+qu, function()
// success
$(".show_success").show();
);
</script>
我认为这将解决您的问题。
【讨论】:
对我不起作用,它总是会跳过一个或多个产品。好像请求太快了。会是什么? @flowDsign 如果它跳过某些产品,那么您需要为每个请求添加一些延迟时间。如果要在 for 循环中为 addToCart(myStringArray[i],2) 添加 1 秒或 2 秒延迟;然后它会工作 它不适用于延迟。我已经一起删除了for
循环,并使用 ajax 成功函数对变量进行计数,以便在每次请求后以及达到最大数量时进行更多控制。
我实际上需要将数量从1增加到90。真的只有这样吗?
您不能将 /glassful/?post_type=product&add-to-cart= 用于 1 个以上的产品,因为您的请求将被阻止我的 Woo。不使数据库过载是一种保护。更好的主意是将产品 ID 发送到 wp ajax 挂钩。我在下面添加了答案以上是关于自定义添加到购物车按钮以将多个产品添加到购物车中:woocommerce的主要内容,如果未能解决你的问题,请参考以下文章
将“添加到购物车”按钮重定向到 Magento 中的不同自定义页面/在 Magento 的产品页面中添加新按钮
基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮