У меня есть сценарий, в котором мне нужно изменить общую стоимость аренды, отрегулировав стоимость блока бронирования в зависимости от его продолжительности.Продолжительность бронирования определяется заказчиком по 4 дня.
В течение 4 дней (минимальная продолжительность) = базовая стоимость + стоимость блока. В течение 8 дней (максимальная продолжительность) = базовая стоимость + стоимость блока + (стоимость блока * 0,75).
На основе Измените цену товара в корзине WooCommerce и оформите код ответа, где я внес некоторые изменения.Вот мой код:
add_action( 'woocommerce_before_calculate_totals', 'custom_cart_item_price', 10, 1 );
function custom_cart_item_price( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
foreach ( $cart->get_cart() as $cart_item ){
$booking_id = $cart_item['booking']['_booking_id'];
$booking = get_wc_booking( $booking_id );
$base_cost = get_post_meta( $cart_item['product_id'], '_wc_booking_cost', true );
$block_cost = get_post_meta( $cart_item['product_id'], '_wc_booking_block_cost', true );
if ( $booking ) {
$duration = $cart_item['booking']['duration'];
if ($duration == 8) {
$new_price = $base_cost +$block_cost + ($block_cost * 0.75); //Calculate the new price
$cart_item['data']->set_price( $new_price ); // Set the new price
}
}
}
}
Это прекрасно работает, но мне интересно, есть ли способ, которым я могу установить это постоянно, используя такое действие, как woocommerce_bookings_pricing_fields, чтобы скидочная цена отображалась на самой странице продукта.