我一直在尝试使用以下代码在我的商店中实现折扣:
add_action('woocommerce_before_calculate_totals', 'set_discount', 10 );
function set_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Loop Through cart items
foreach ( $cart->get_cart() as $cart_item ) {
// 50% items discount
$cart_item['data']->set_price( $cart_item['data']->get_price() / 2 );
}
}
似乎在结帐时,某些重复使用原始价格的标准AJAX请求覆盖了设置价格。我尝试使用具有相同结果的add_fee(),也尝试停用所有插件(当然,woocommerce除外),并且尝试切换到另一个主题-无效!
使用Wordpress 5.0.3,Woocommerce 3.5.4,Storefront 2.4.2的子主题
1)这是在结帐时显示的内容,显示时间约为1-2秒:
2)这是装载微调器完成后显示的内容-原始价格:
答案 0 :(得分:1)
自Woocommerce 3.2+起避免出现问题和错误的正确代码是:
add_action('woocommerce_before_calculate_totals', 'cart_item_discount', 10, 1 );
function cart_item_discount( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Avoiding hook repetition (when using price calculations for example)
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Loop Through cart items
foreach ( $cart->get_cart() as $cart_item ) {
$original_price = $cart_item['data']->get_price(); // Get original product price
$discounted_price = $original_price / 2; // 50 % of discount
$cart_item['data']->set_price( $discounted_price );
}
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试并可以正常运行(在最新版本上进行了测试:Wordpress 5.0.x | Woocommerce 3.5.x | Storefront 2.4.x)
如果它不起作用,那是因为其他一些东西或自定义项正在与之交互。您需要首先检查Woocommerce>状态中是否有红色项目(其中所有被覆盖的模板最后都必须是最新的)。
答案 1 :(得分:0)
add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' );
function add_custom_price( $cart_object ) {
$custom_price = 10; // This will be your custome price
foreach ( $cart_object->cart_contents as $key => $value ) {
$custom_price = ($value['data']->price)/2;
//$value['data']->price = $custom_price;
// for WooCommerce version 3+ use:
$value['data']->set_price($custom_price);
}
}