Woocommerce 透過 luginhive.com 的「Woocommerce 預訂和約會」外掛程式透過掛鉤(或其他方式)更改價格
P粉409742142
P粉409742142 2024-03-19 23:51:59
0
1
384

我的網站的整體背景

網站按小時出租房間。

我在我的網站上使用「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 點至晚上 10 點 = 100 美元
  • 晚上 10 點至凌晨 4 點 = 600 美元

如果客戶訂購晚上 9 點至凌晨 5 點 8 小時(總區塊數:16),價格將為 600 美元,而不是 800 美元

  • 晚上 9 點至晚上 10 點 = 100 美元
  • 晚上 10 點到凌晨 5 點 = 600 美元(規則觸發,因為訂單大於 6 小時)

如果客戶在晚上 9 點到上午 11 點的 14 小時內訂購(總區塊數:28),價格將為 800 美元,而不是 1400 美元

  • 晚上 9 點至晚上 10 點 = 100 美元
  • 晚上 10 點到上午 10 點 = 600 美元(規則觸發,因為訂單大於 6 小時)
  • 上午 10 點至上午 11 點 = 100 美元

我嘗試按照這篇文章根據 WooCommerce Bookings 持續時間設定價格並對我的問題進行調整,但沒有成功。

P粉409742142
P粉409742142

全部回覆(1)
P粉237029457

我創建了程式碼片段,但沒有看到任何變化。 檢查此 連結到即時預覽

<?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;
}
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板