Woocommerce-购物车中相同产品的不同价格
Woocommerce- Different prices for same product in cart
我正在为亲戚的生意创建电子商务商店。他拥有用户必须在网站上个性化的产品。我正在编写一个单独的页面,允许用户执行此操作,这将 link 返回商店并在完成后将商品添加到购物车。
我找到了将每个产品分别添加到购物车的解决方案,而不是添加数量(因为添加的每个产品都是个性化的),以及更改购物车中商品价格的解决方案。
WooCommerce: Add product to cart with price override?
https://businessbloomer.com/woocommerce-display-separate-cart-items-product-quantity-1/
问题是所有项目都已更改,而不仅仅是最后添加的一项。
例如:用户设计了一支圆珠笔,上面写着她的名字。价格是 4 美元。用户然后用她的名字设计一支中性笔。购物车将显示两支单独的钢笔,计算价格增加,但所有钢笔的价格都会增加,而不仅仅是最后一支添加的钢笔。我需要找到一种方法来根据从产品构建页面发送的价格来设置最后添加的商品的价格。到目前为止,我所做的一切都没有奏效。
可变产品不适用于此站点。
//To display a product separately every time it is added
function bbloomer_split_product_individual_cart_items( $cart_item_data, $product_id ){
$unique_cart_item_key = uniqid();
$cart_item_data['unique_key'] = $unique_cart_item_key;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data','bbloomer_split_product_individual_cart_items', 10, 2 );
add_filter( 'woocommerce_is_sold_individually', '__return_true' );
//To change the item price programmatically. Changes all items with the same ID
//I need it to change only the last one added.
//Set to retrieve new price from the customizing page
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 10, 1);
/**
* @param $cart_obj
*/
function add_custom_price($cart_obj ) {
ob_start();
include 'createbb.php';
global $custom_price;
$target_product_id = 17;
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart_obj->get_cart() as $key => $value ) {
if ($value['product_id'] == $target_product_id) {
$value['data']->set_price($custom_price);
}
}
ob_end_clean();
}
您正在寻找的功能类型实际上非常常见,以至于它有一个名称 "Product Options"(这与变体不同)。此功能允许您通过编辑产品页面上的设计将可配置的附加组件添加到产品的价格中。在许多像 OpenCart 这样的电子商务平台中,您可以免费内置这种功能,但是 Automattic 选择将其作为单独的螺栓保留,并在上面收费:
https://woocommerce.com/products/product-add-ons/
在你说是之前,他们收费很烦人,这真的是人们要求的如此普遍的事情,你可以说这是一个经过深思熟虑的决定,将其货币化。是的,仍然很有可能对所有定制的东西进行编程,但除了避免为该功能付费外,你不可避免地会无缘无故地重新发明轮子(上面有其他人制作的免费插件版本,google是你的朋友)。
想一想,如果 Automattic 将来改变他们的钩子怎么办?你将不得不修改你的代码,假设你在网站崩溃之前发现了。如果您想更改选项,或者需要其他人更改选项而您不在身边怎么办?
如果您权衡一下,最终您会发现最好的选择是获取官方插件,或者使用其中一种免费替代品。相信我,我是在帮你一个忙。
幸田
我正在为亲戚的生意创建电子商务商店。他拥有用户必须在网站上个性化的产品。我正在编写一个单独的页面,允许用户执行此操作,这将 link 返回商店并在完成后将商品添加到购物车。 我找到了将每个产品分别添加到购物车的解决方案,而不是添加数量(因为添加的每个产品都是个性化的),以及更改购物车中商品价格的解决方案。
WooCommerce: Add product to cart with price override? https://businessbloomer.com/woocommerce-display-separate-cart-items-product-quantity-1/
问题是所有项目都已更改,而不仅仅是最后添加的一项。 例如:用户设计了一支圆珠笔,上面写着她的名字。价格是 4 美元。用户然后用她的名字设计一支中性笔。购物车将显示两支单独的钢笔,计算价格增加,但所有钢笔的价格都会增加,而不仅仅是最后一支添加的钢笔。我需要找到一种方法来根据从产品构建页面发送的价格来设置最后添加的商品的价格。到目前为止,我所做的一切都没有奏效。
可变产品不适用于此站点。
//To display a product separately every time it is added
function bbloomer_split_product_individual_cart_items( $cart_item_data, $product_id ){
$unique_cart_item_key = uniqid();
$cart_item_data['unique_key'] = $unique_cart_item_key;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data','bbloomer_split_product_individual_cart_items', 10, 2 );
add_filter( 'woocommerce_is_sold_individually', '__return_true' );
//To change the item price programmatically. Changes all items with the same ID
//I need it to change only the last one added.
//Set to retrieve new price from the customizing page
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price', 10, 1);
/**
* @param $cart_obj
*/
function add_custom_price($cart_obj ) {
ob_start();
include 'createbb.php';
global $custom_price;
$target_product_id = 17;
// This is necessary for WC 3.0+
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
foreach ( $cart_obj->get_cart() as $key => $value ) {
if ($value['product_id'] == $target_product_id) {
$value['data']->set_price($custom_price);
}
}
ob_end_clean();
}
您正在寻找的功能类型实际上非常常见,以至于它有一个名称 "Product Options"(这与变体不同)。此功能允许您通过编辑产品页面上的设计将可配置的附加组件添加到产品的价格中。在许多像 OpenCart 这样的电子商务平台中,您可以免费内置这种功能,但是 Automattic 选择将其作为单独的螺栓保留,并在上面收费:
https://woocommerce.com/products/product-add-ons/
在你说是之前,他们收费很烦人,这真的是人们要求的如此普遍的事情,你可以说这是一个经过深思熟虑的决定,将其货币化。是的,仍然很有可能对所有定制的东西进行编程,但除了避免为该功能付费外,你不可避免地会无缘无故地重新发明轮子(上面有其他人制作的免费插件版本,google是你的朋友)。
想一想,如果 Automattic 将来改变他们的钩子怎么办?你将不得不修改你的代码,假设你在网站崩溃之前发现了。如果您想更改选项,或者需要其他人更改选项而您不在身边怎么办?
如果您权衡一下,最终您会发现最好的选择是获取官方插件,或者使用其中一种免费替代品。相信我,我是在帮你一个忙。
幸田