我正在创建一个WooCommerce(5.6.0版)网站,用户可以在该网站上购买泡沫产品,并在存档页面上计算价格。基本上,用户输入维度,然后根据公式计算价格。我目前正在努力更新购物车中的价格,我以前没有在这一级别定制产品和价格的经验,因此任何帮助都将不胜感激。。到目前为止,我已经完成了以下步骤:
1.获取(通过Ajax)并在WC_会话中设置自定义产品价格
function get_custom_product_price_set_to_session(){
// Check that there is a 'foamPrice' and foamProductI _POST variable
if (isset($_POST['foamProductId']) && isset($_POST['foamPrice'])) {
// Enable customer WC_Session (needed on first add to cart)
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
// Set the product_id and the custom price in WC_Session variable
WC()->session->set('foam_price', [
'id' => (int)wc_clean($_POST['foamProductId']),
'price' => (float)wc_clean($_POST['foamPrice']),
]);
}}
add_action('wp_ajax_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session');
add_action('wp_ajax_nopriv_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session');
2.从WC_Session数据更改购物车项目价格:
add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 20, 1);
function custom_cart_item_price($cart){
if (is_admin() && !defined('DOING_AJAX'))
return;
// Must be required since Woocommerce version 3.2 for cart items properties changes
if (did_action('woocommerce_before_calculate_totals') >= 2)
return;
// Loop through our specific cart item keys
foreach ($cart->get_cart() as $cart_item) {
// Get custom product price for the current item
if (($data = WC()->session->get('foam_price')) && $cart_item['data']->get_id() == $data['id']) {
// Set the new product price
$cart_item['data']->set_price($data['price']);
}
}}
我遇到的问题是,它只适用于添加到购物车的最新产品,每次我添加新产品到购物车时,添加到购物车的先前产品都会重新设置0价格。如果有人能够提供一些指导,我将非常感激。感谢一个磨坊!
具有
WC()->session->set('foam_price', [
'id' => (int)wc_clean($_POST['foamProductId']),
'price' => (float)wc_clean($_POST['foamPrice']),
]);
你基本上是覆盖了以前的“泡沫价格”与最新添加到购物车。
在我看来,您需要为不同的产品ID存储不同的值。
试用(未经测试):
function get_custom_product_price_set_to_session(){
// Check that there is a 'foamPrice' and foamProductI _POST variable
if (isset($_POST['foamProductId']) && isset($_POST['foamPrice'])) {
// Enable customer WC_Session (needed on first add to cart)
if (!WC()->session->has_session()) {
WC()->session->set_customer_session_cookie(true);
}
// Set the product_id and the custom price in WC_Session variable
WC()->session->set('foam_price' . wc_clean($_POST['foamProductId']), [
'id' => (int)wc_clean($_POST['foamProductId']),
'price' => (float)wc_clean($_POST['foamPrice']),
]);
}}
add_action('wp_ajax_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session');
add_action('wp_ajax_nopriv_get_custom_product_price_set_to_session', 'get_custom_product_price_set_to_session');
...然后:
add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 20, 1);
function custom_cart_item_price($cart){
if (is_admin() && !defined('DOING_AJAX'))
return;
// Must be required since Woocommerce version 3.2 for cart items properties changes
if (did_action('woocommerce_before_calculate_totals') >= 2)
return;
// Loop through our specific cart item keys
foreach ($cart->get_cart() as $cart_item) {
// Get custom product price for the current item
if (($data = WC()->session->get('foam_price' . $cart_item['data']->get_id())) && $cart_item['data']->get_id() == $data['id']) {
// Set the new product price
$cart_item['data']->set_price($data['price']);
}
}}
在WooCommerce中,我希望有一个复选框,当按下时,它会将一个产品添加到我的购物车中,并且该产品的价格是购物车总价格的3%。 基于“在Woocommerce结帐页面中将产品添加到购物车的复选框字段”回答线程,并进行了一些编辑以满足我的需要,以下是我的代码: 它添加产品精细,一切都好。然而,当我设定价格时,它没有更新。 好的,这是未选中的复选框。 这是选中后的复选框。如您所见,项目的值为46.
我使用Woocommerce插件在wordpress中开发了购物车。我需要按产品价格在购物车订单中显示产品,请帮助我做到这一点 谢啦
我使用WooCommerce Wordpress中的以下代码,通过一个模板,使用add_to_cart($product_id)功能添加了许多产品。 现在,我希望通过此模板为每个产品添加自定义价格。现在购物车中的价格和数据库中的价格一样,但我想通过这一点添加我的自定义价格。有人能帮我做同样的事吗。谢谢
我已经添加了一个自定义字段,其中有图片帧的额外价格,现在如果图片价格是10$和用户选择一个帧,它将加起来5$让说,总数将是15$。 现在,如果我添加另一个产品,它的选择定制框架价格应该得到添加。e、 g产品1的价格是:10美元,上面选择的框架是:frame1谁的价格是5美元,那么该产品的总价格将是15美元,如果产品2加上价格10美元,选择frame2的价格是6美元,那么该产品的总价格将是16美元,
我使用“从Woocommerce中的functions.php文件中添加到购物车按钮上显示价格”的答案代码,在简单的产品中添加价格。 但我想改进这个功能,动态显示选择的变异价格内按钮。在变体产品页面上使用此代码,它只显示最低的价格。有什么解决办法吗?