基于出色的post,我构建了一些代码行来更改变量产品的变体。
// Generating dynamically the product "sale price"
add_filter( 'woocommerce_product_get_sale_price', 'custom_dynamic_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'custom_dynamic_sale_price', 10, 2 );
function custom_dynamic_sale_price( $sale_price, $product ) {
if( $product->get_id() != 4096 ) return $price_html;;
$rate = 0.5;
if( empty($sale_price) || $sale_price == 0 )
return $product->get_regular_price() * $rate;
else
return $sale_price;
};
// Displayed formatted regular price + sale price
add_filter( 'woocommerce_get_price_html', 'custom_dynamic_sale_price_html', 20, 2 );
function custom_dynamic_sale_price_html( $price_html, $product ) {
if( $product->get_id() != 4096 ) return $price_html;;
if( $product->is_type('variable') ) return $price_html;
$price_html = wc_format_sale_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ), wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) ) ) . $product->get_price_suffix();
return $price_html;
}
add_action( 'woocommerce_before_calculate_totals', 'set_cart_item_sale_price', 20, 1 );
function set_cart_item_sale_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
/*
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
*/
// Iterate through each cart item
foreach( $cart->get_cart() as $cart_item ) {
if ( $cart_item['data']->get_id() == 4096) {
$price = $cart_item['data']->get_sale_price(); // get sale price
$cart_item['data']->set_price( $price ); // Set the sale price
}
}
}
几乎可以用:) 当我在购物车中查看时,总金额是正确的,但是在概览中,运费已经累加了:
,上面写着“免费送货”。 (这可能会使客户感到困惑)
在类别页面上,价格也不会更新。它仍然显示“此变化的价格为16欧元起”。
你们有个主意吗?
谢谢!