網站按小時出租房間。
我在我的網站上使用「WooCommerce Bookings And Appointments」外掛。 外掛程式 URL 為 https://www.pluginhive.com/product/woocommerce-booking-and-appointments/
該外掛程式支援成本規則,我可以控制所有時間的價格。 但我找不到特定場景的解決方案。
如果客戶選擇晚上 10 點到上午 10 點之間的時間。
且最小訂單時間大於 6 小時。
那麼價格將為6小時。
#預訂期限在常規設置中設置,每段 30 分鐘。
預訂費用設定: 3 小時最低價格為 300 美元(我們使用第 1 至 6 塊的規則)。
基本客房費用:300 美元(客戶可以訂購少於 3 小時的價格,但價格至少為 3 小時)。
區塊成本:50 美元(從區塊編號 7 開始)。
場景範例:
#如果客戶從晚上11 點到凌晨3 點訂購4 小時(總塊數:8),價格將是常規價格:400 美元(基本成本:300 美元100 美元[2 塊,每塊50 美元])
如果客戶訂購從晚上 11 點到凌晨 4 點的 5 小時(總區塊數:10),價格將是常規價格:500 美元
如果客戶訂購從晚上 11 點到凌晨 5 點的 6 小時(總區塊數:12),價格將是常規價格:600 美元
如果客戶訂購從晚上 11 點到早上 6 點的 7 小時(總區塊數:14),價格將為 600 美元,而不是 700 美元
如果客戶訂購從晚上 11 點到早上 7 點的 8 小時(總區塊數:16),價格將為 600 美元,而不是 800 美元
如果客戶訂購從晚上 9 點到凌晨 3 點的 6 小時(總區塊數:12),價格將為 600 美元
如果客戶訂購晚上 9 點到凌晨 4 點 7 小時(總區塊數:14),價格將為 600 美元,而不是 700 美元
如果客戶訂購晚上 9 點至凌晨 5 點 8 小時(總區塊數:16),價格將為 600 美元,而不是 800 美元
如果客戶在晚上 9 點到上午 11 點的 14 小時內訂購(總區塊數:28),價格將為 800 美元,而不是 1400 美元
我嘗試按照這篇文章根據 WooCommerce Bookings 持續時間設定價格並對我的問題進行調整,但沒有成功。
P粉2370294572024-03-20 22:05:37
我創建了程式碼片段,但沒有看到任何變化。 檢查此 連結到即時預覽
<?php // Calculates price based on selected booking start time and minimum order hours add_action( 'woocommerce_before_calculate_totals', 'cwpai_booking_price_calculation', 10, 1 ); function cwpai_booking_price_calculation( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) { return; } foreach ( $cart->get_cart() as $cart_item ) { $product_id = $cart_item['product_id']; // Get start time and minimum order hours $start_time = strtotime($_POST['wc_bookings_field_start_date'][0] . ' ' . $_POST['wc_bookings_field_start_time'][0]); $minimum_hours = get_post_meta( $product_id, '_minimum_duration', true ); // Check if start time and minimum order hours meet condition if ( date('H:i', $start_time) >= '22:00' && date('H:i', $start_time) <= '10:00' && $minimum_hours >= 6 ) { // Calculate maximum cost for 6 hours $max_cost = $cart_item['data']->get_price() * 6; // Get current cost based on duration $duration = WC_Bookings_Cart::calculate_booking_duration( $cart_item['booking'], true, true ); $current_cost = $duration['cost']; // Update cost to maximum cost for 6 hours if ( $current_cost > $max_cost ) { $cart_item['data']->set_price( $max_cost ); } } } } // Update post meta when product is saved add_action( 'woocommerce_process_product_meta', 'cwpai_update_booking_meta' ); function cwpai_update_booking_meta( $post_id ) { // Only run for bookable products if ( get_post_meta( $post_id, '_wc_booking_type', true ) !== 'booking' ) { return; } // Get minimum order hours $minimum_hours = isset( $_POST['_minimum_duration'] ) ? absint( $_POST['_minimum_duration'] ) : 0; // Update post meta with new booking cost if ( $minimum_hours >= 6 ) { $max_cost = get_post_meta( $post_id, '_price', 真 ) * 6; update_post_meta( $post_id, '_new_booking_cost', $max_cost ); } else { delete_post_meta( $post_id, '_new_booking_cost' ); } } // Modify product costs to new booking cost add_filter( 'woocommerce_product_get_price', 'cwpai_modify_product_costs', 10, 2 ); add_filter( 'woocommerce_product_get_regular_price', 'cwpai_modify_product_costs', 10, 2 ); function cwpai_modify_product_costs( $price, $product ) { $new_booking_cost = get_post_meta( $product->get_id(), '_new_booking_cost', true ); if ( $new_booking_cost ) { $price = $new_booking_cost; } return $price; }