suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Woocommerce Ändern Sie Preise über Hooks (oder auf andere Weise) mit dem Plugin „Woocommerce Bookings and Appointments“ von luginhive.com

Allgemeiner Hintergrund meiner Website

Die Website vermietet Zimmer stundenweise.

Ich verwende das Plugin „WooCommerce Bookings And Appointments“ auf meiner Website. Die Plugin-URL lautet https://www.pluginhive.com/product/woocommerce-booking-and-appointments/

Das Plugin unterstützt Kostenregeln und ich kann den Preis jederzeit kontrollieren. Aber ich kann keine Lösung für mein spezielles Szenario finden.

Mein Ziel ist es, die folgenden Regeln hinzuzufügen:

Wenn Kunde eine Zeit zwischen 22:00 und 10:00 Uhr wählt.

Und die Mindestbestellzeit beträgt mehr als 6 Stunden.

Dann beträgt der Preis 6 Stunden .

Musterhauspreis

Der Buchungszeitraum wird in den allgemeinen Einstellungen festgelegt, 30 Minuten pro Sitzung.

Einstellungen für Buchungsgebühren: 3 Stunden Mindestpreis beträgt 300 $ (wir verwenden die Regeln von Block 1 bis 6).

Grundpreis für das Zimmer: 300 $ (Kunden können weniger als 3 Stunden bestellen, der Preis beträgt jedoch mindestens 3 Stunden).

Blockkosten: 50 $ (beginnend mit Blocknummer 7).

Szenenbeispiel:

Wenn ein Kunde 4 Stunden von 23:00 bis 3:00 Uhr bestellt (Blöcke insgesamt: 8), entspricht der Preis dem regulären Preis: 400 $ (Grundkosten: 300 $ + 100 $ [2 Blöcke zu je 50 $])

Wenn ein Kunde 5 Stunden von 23:00 bis 4:00 Uhr bestellt (Blöcke insgesamt: 10), ist der Preis der reguläre Preis: 500 $

Wenn der Kunde 6 Stunden von 23:00 bis 5:00 Uhr bestellt (Blöcke insgesamt: 12), entspricht der Preis dem regulären Preis: 600 $

Wenn ein Kunde 7 Stunden von 23:00 bis 6:00 Uhr bestellt (Blöcke insgesamt: 14), beträgt der Preis 600 $ statt 700 $

Wenn ein Kunde 8 Stunden von 23:00 bis 7:00 Uhr bestellt (Blöcke insgesamt: 16), beträgt der Preis 600 $ statt 800 $

Wenn ein Kunde 6 Stunden von

21:00 Uhr bis 3:00 Uhr morgens bestellt (Blöcke insgesamt: 12), beträgt der Preis 600 $ Wenn ein Kunde 7 Stunden lang von 21 bis 4 Uhr morgens bestellt (Blöcke insgesamt: 14), beträgt der Preis 600 $ statt 700 $

21–22 Uhr = 100 $ 22–4 Uhr = 600 $

21–22 Uhr = 100 $ 22 Uhr bis 5 Uhr = 600 $

(Regel wird ausgelöst, weil die Bestellung länger als 6 Stunden dauert)
P粉409742142P粉409742142291 Tage vor397

Antworte allen(1)Ich werde antworten

  • 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', true ) * 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;
    }

    Antwort
    0
  • StornierenAntwort