Woocommerce Ändern Sie Preise über Hooks (oder auf andere Weise) mit dem Plugin „Woocommerce Bookings and Appointments' von luginhive.com
P粉409742142
P粉409742142 2024-03-19 23:51:59
0
1
386

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 $

  • Wenn ein Kunde 8 Stunden lang
  • 21 bis 5 Uhr
  • bestellt (Blöcke insgesamt: 16), beträgt der Preis 600 $ statt 800 $

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

(Regel wird ausgelöst, weil die Bestellung länger als 6 Stunden dauert)
  • Wenn ein Kunde innerhalb von 14 Stunden von 21:00 bis 11:00 Uhr bestellt (Blöcke insgesamt: 28), beträgt der Preis 800 US-Dollar statt 1400 US-Dollar
    • 21–22 Uhr = 100 $
    • 22:00 bis 10:00 Uhr = 600 $ (Regel wird ausgelöst, weil die Bestellung älter als 6 Stunden ist)
    • 10-11 Uhr = 100 $

    Ich habe versucht, diesem Artikel zu folgen, Preise basierend auf der Dauer von WooCommerce-Buchungen festzulegen und Anpassungen an meinem Problem vorzunehmen, aber ohne Erfolg.

P粉409742142
P粉409742142

Antworte allen(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', 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;
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage