首頁  >  問答  >  主體

Woocommerce 透過 luginhive.com 的「Woocommerce 預訂和約會」外掛程式透過掛鉤(或其他方式)更改價格

我的網站的整體背景

網站按小時出租房間。

我在我的網站上使用「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粉409742142P粉409742142237 天前328

全部回覆(1)我來回復

  • P粉237029457

    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;
    }

    回覆
    0
  • 取消回覆