问题描述
我们有 woocommerce 网站,其中包含所有虚拟和可下载产品。我们有多个与每个产品相关联的票证。我们进行了一些研究,并了解到 woocommerce 将购物车中的每件商品都视为单独的预订。我们想对购物车中的所有商品进行单一预订。
例如, 我们想在 2021 年 5 月 6 日的某个日期参观一个博物馆,那里有成人、儿童和老年人的门票。假设用户选择了 5 名成人、2 名儿童和 1 名老年人。根据我们的研究,我们了解到 woocommerce 将进行 3 次预订
- 5 位成人
- 2 个孩子
- 1 位老年人。
我们希望只保留 5 名成人、2 名儿童和 1 名老年人的单次预订。
有没有办法在woocommerce中做这样的事情?
解决方法
那里可能有插件,但最简单的方法是构建您自己的函数来处理这个问题。
例如,您可以添加自己的按钮或编写一些触发 AJAX 请求的 JavaScript,而不是使用默认的添加到购物车按钮。然后,该请求将以编程方式将相关商品添加到购物车。完成后,您可以将用户带到购物车页面。所以像这样,请注意,这是一个非常粗略的未经测试的示例,有很多关于如何执行此操作的信息
在加入购物车时触发
addToCart: function(e) {
e.preventDefault();
var item_id = $(e.target).data('something');
$.ajax({
url: ajaxurl,type: "POST",data: {
'action': 'add_to_cart','item_id': item_id
},success:function(data) {
// send to cart
}
});
}
在你的functions.php 文件中(或者在一个单独的functions-ajax.php 文件中更好)
<?php
function customAddToCart(){
global $woocommerce;
// you should do some checking against the values sent over along with a nonce
// then do something with the item id you sent over and add products to the cart as required,so for example:
if($_POST['item_id'] == "98765") {
$woocommerce->cart->add_to_cart(10,5); // 5 adult tickets
$woocommerce->cart->add_to_cart(4,2); // 2 child tickets
$woocommerce->cart->add_to_cart(11); // 1 senior tickets
}
// obviously needs more logic and that
echo "1";
die();
}
add_action('wp_ajax_add_to_cart','customAddToCart');
add_action('wp_ajax_nopriv_add_to_cart','customAddToCart');
,
是的,您不必将成人、儿童和老年人视为单独的项目,但您需要将其视为订单的元数据。
假设您有一个 product A
,现在当有人访问产品页面时,它是参观博物馆,那么 adults
、kids
和 {{1} 应该有 3 个数字字段}.每当必须预订产品时,他/她必须确保他/她至少确保三个字段中的任何一个至少有 1 个值。
这些字段将负责更新产品的价格,一旦添加了产品,成人、儿童和老年人的值将保存在订单中。
谷歌搜索后我找到了这个插件 - Advanced Product Fields
- 9 种不同的表单元素可供选择 - [使用它来创建表单]
- 动态产品价格:根据字段值更改价格
我认为这不会按顺序保存订单元数据(成人、儿童和老年人的数量)。使用此 answer 使用代码更新元数据。