ホームページ  >  に質問  >  本文

Woocommerce luginhive.com の「Woocommerce Bookings and Appointments」プラグインを使用して、フック (またはその他の手段) を介して価格を変更します。

私のウェブサイトの一般的な背景

このウェブサイトは時間単位で部屋を貸し出します。

私は自分のウェブサイトで「WooCommerce Bookings And Appointments」プラグインを使用しています。 プラグインの URL は https://www.pluginhive.com/product/woocommerce-booking-and-appointments/

です。

プラグインはコストルールをサポートしており、いつでも価格を制御できます。 しかし、特定のシナリオに対する解決策が見つかりません。

私の目標は、次のルールを追加することです:

お客様が 午後 10 時から午前 10 時までの時間を選択した場合

および 最小 注文時間 は 6 時間 を超えています。

その場合、 料金は 6 時間 となります。

モデルハウス価格

予約期間は一般設定で、1期間あたり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) を注文した場合、価格は $700 ではなく $600 になります。

顧客が午後 11 時から午前 7 時までの 8 時間 (合計ブロック数: 16) を注文した場合、価格は $800 ではなく $600 になります。

顧客が

午後 9 時から午前 3 時までの 6 時間を注文した場合 (ブロック数: 12)、価格は $600

となります。

顧客が

午後 9 時から午前 4 時まで 7 時間 (合計ブロック数: 14) を注文した場合、価格は $700 ではなく $600 になります

午後9時~午後10時 = 100ドル 午後10時~午前4時 = 600ドル

午後9時~午後10時 = 100ドル 午後 10 時から午前 5 時まで = $600

(注文が 6 時間以上経過しているためルールがトリガーされます)午後9時~午後10時 = 100ドル

午後 10 時から午前 10 時まで = $600 (注文が 6 時間以上経過しているためルールがトリガーされます)

P粉409742142P粉409742142237日前329

全員に返信(1)返信します

  • P粉237029457

    P粉2370294572024-03-20 22:05:37

    コード スニペットを作成しましたが、変更は見られません。 ライブ プレビューへの リンクをチェックしてください

    <?php
    // 選択した予約開始時間と最低注文時間に基づいて価格を計算します
    add_action( 'woocommerce_before_calculate_totals', 'cwpai_booking_price_calculation', 10, 1 );
    function cwpai_booking_price_calculation( $cart ) {
        if ( is_admin() && ! 定義された( 'DOING_AJAX' ) ) {
            戻る;
        }
        
        foreach ( $cart->get_cart() as $cart_item ) {
            $product_id = $cart_item['product_id'];
    
            // 開始時間と最低注文時間を取得します
            $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 );
    
            // 開始時間と最低注文時間が条件を満たしているかどうかを確認します
            if ( date('H:i', $start_time) >= '22:00' && date('H:i', $start_time) <= '10:00' && $minimum_hours >= 6 ) {
                //6時間の最大料金を計算
                $max_cost = $cart_item['data']->get_price() * 6;
    
                // 期間に基づいて現在のコストを取得します
                $duration = WC_Bookings_Cart::calculate_booking_duration( $cart_item['booking'], true, true );
                $current_cost = $duration['コスト'];
    
                // コストを 6 時間の最大コストに更新します
                if ( $current_cost > $max_cost ) {
                    $cart_item['data']->set_price( $max_cost );
                }
            }
        }
    }
    
    // 商品の保存時に投稿メタを更新します
    add_action( 'woocommerce_process_product_meta', 'cwpai_update_booking_meta' );
    function cwpai_update_booking_meta( $post_id ) {
        // 予約可能な商品に対してのみ実行されます
        if ( get_post_meta( $post_id, '_wc_booking_type', true ) !== 'booking' ) {
            戻る;
        }
        
        // 最低注文時間を取得する
        $minimum_hours = isset( $_POST['_minimum_duration'] ) ? absint( $_POST['_minimum_duration'] ) : 0;
    
        // 新しい予約コストで投稿メタを更新します
        if ( $minimum_hours >= 6 ) {
            $max_cost = get_post_meta( $post_id, '_price', true ) * 6;
            update_post_meta( $post_id, '_new_booking_cost', $max_cost );
        } それ以外 {
            delete_post_meta( $post_id, '_new_booking_cost' );
        }
    }
    
    // 製品コストを新しい予約コストに変更します
    add_filter( 'woocommerce_product_get_price', 'cwpai_modify_product_costs', 10, 2 );
    add_filter( 'woocommerce_product_get_normal_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;
        }
    
        $price を返します。
    }

    返事
    0
  • キャンセル返事