Heim > Fragen und Antworten > Hauptteil
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.
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 .
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)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粉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; }