动态购物车商品定价不适用于 WooCommerce 3.0+ 中的订单
Dynamic cart item pricing not working on orders in WooCommerce 3.0+
我正在使用 WooCommerce 3.0+,并且我在某个页面上设置了产品价格。
$regular_price = get_post_meta( $_product->id, '_regular_price', true);
$buyback_percentage = get_post_meta( $_product->id, '_goldpricelive_buy_back', true);
$fixed_amount = get_post_meta( $_product->id, '_goldpricelive_fixed_amount', true);
$markedup_price = get_post_meta( $_product->id, '_goldpricelive_markup', true);
$buyback_price = ($regular_price - $fixed_amount)/(1 + $markedup_price/100) * (1-$buyback_percentage/100);
$_product->set_price($buyback_price);
我的购物车上的价格正在更新,但是当我点击提交订单时,订单对象似乎没有得到我设置的价格。取原产地价格。
知道如何实现吗?
谢谢
已使用 get_price()
方法更新……
您应该在此自定义挂钩函数、您的产品 ID 或产品 ID 数组中使用 woocommerce_before_calculate_totals
操作挂钩设置。
然后您可以对它们中的每一个进行自定义计算以设置将在购物车、结帐和提交订单后设置的自定义价格。
这是在 WooCommerce 3.0+ 版本上测试的功能代码:
add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart_obj ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Set below your targeted individual products IDs or arrays of product IDs
$target_product_id = 53;
$target_product_ids_arr = array(22, 56, 81);
foreach ( $cart_obj->get_cart() as $cart_item ) {
// The corresponding product ID
$product_id = $cart_item['product_id'];
// For a single product ID
if($product_id == $target_product_id){
// Custom calculation
$price = $cart_item['data']->get_price() + 50;
$cart_item['data']->set_price( floatval($price) );
}
// For an array of product IDs
elseif( in_array( $product_id, $target_product_ids_arr ) ){
// Custom calculation
$price = $cart_item['data']->get_price() + 30;
$cart_item['data']->set_price( floatval($price) );
}
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
Then you can easily replace the fixed values in my fake calculations by your product dynamic values with that with get_post_meta() function just like in your code as you have the $product_id
for each cart item…
我正在使用 WooCommerce 3.0+,并且我在某个页面上设置了产品价格。
$regular_price = get_post_meta( $_product->id, '_regular_price', true);
$buyback_percentage = get_post_meta( $_product->id, '_goldpricelive_buy_back', true);
$fixed_amount = get_post_meta( $_product->id, '_goldpricelive_fixed_amount', true);
$markedup_price = get_post_meta( $_product->id, '_goldpricelive_markup', true);
$buyback_price = ($regular_price - $fixed_amount)/(1 + $markedup_price/100) * (1-$buyback_percentage/100);
$_product->set_price($buyback_price);
我的购物车上的价格正在更新,但是当我点击提交订单时,订单对象似乎没有得到我设置的价格。取原产地价格。
知道如何实现吗?
谢谢
已使用 get_price()
方法更新……
您应该在此自定义挂钩函数、您的产品 ID 或产品 ID 数组中使用 woocommerce_before_calculate_totals
操作挂钩设置。
然后您可以对它们中的每一个进行自定义计算以设置将在购物车、结帐和提交订单后设置的自定义价格。
这是在 WooCommerce 3.0+ 版本上测试的功能代码:
add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart_obj ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Set below your targeted individual products IDs or arrays of product IDs
$target_product_id = 53;
$target_product_ids_arr = array(22, 56, 81);
foreach ( $cart_obj->get_cart() as $cart_item ) {
// The corresponding product ID
$product_id = $cart_item['product_id'];
// For a single product ID
if($product_id == $target_product_id){
// Custom calculation
$price = $cart_item['data']->get_price() + 50;
$cart_item['data']->set_price( floatval($price) );
}
// For an array of product IDs
elseif( in_array( $product_id, $target_product_ids_arr ) ){
// Custom calculation
$price = $cart_item['data']->get_price() + 30;
$cart_item['data']->set_price( floatval($price) );
}
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
Then you can easily replace the fixed values in my fake calculations by your product dynamic values with that with get_post_meta() function just like in your code as you have the
$product_id
for each cart item…