Rumah  >  Soal Jawab  >  teks badan

Woocommerce Tukar harga melalui cangkuk (atau cara lain) dengan pemalam "Tempahan dan Janji Temu Woocommerce" daripada luginhive.com

Latar belakang umum laman web saya

Laman web menyewa bilik mengikut jam.

Saya menggunakan pemalam "WooCommerce Bookings And Appointments" di tapak web saya. URL pemalam ialah https://www.pluginhive.com/product/woocommerce-booking-and-appointments/

Pemalam menyokong peraturan kos dan saya boleh mengawal harga sepanjang masa. Tetapi saya tidak dapat mencari penyelesaian untuk senario khusus saya.

Matlamat saya adalah untuk menambah peraturan berikut:

Jika pelanggan memilih masa antara 10 malam dan 10 pagi.

Dan minimum masa pesananlebih daripada 6 jam.

Kemudian harga akan menjadi 6 jam .

Harga rumah model

Tempoh tempahan ditetapkan dalam tetapan umum, 30 minit setiap sesi.

Tetapan yuran tempahan: 3 jam harga minimum ialah $300 (kami menggunakan peraturan dari blok 1 hingga 6).

Kadar bilik asas: $300 (pelanggan boleh menempah kurang dari 3 jam, tetapi harga minimum 3 jam).

Kos Sekatan: $50 (bermula dengan blok nombor 7).

Contoh adegan:

Jika pelanggan memesan 4 jam dari 11 malam hingga 3 pagi (jumlah blok: 8), harga akan menjadi harga biasa: $400 (kos asas: $300 + $100 [2 blok, $50 setiap satu])

Jika pelanggan memesan 5 jam dari 11 malam hingga 4 pagi (jumlah blok: 10), harga akan menjadi harga biasa: $500

Jika pelanggan memesan 6 jam dari 11 malam hingga 5 pagi (jumlah blok: 12), harga akan menjadi harga biasa: $600

Jika pelanggan memesan 7 jam dari 11 malam hingga 6 pagi (jumlah blok: 14), harganya ialah $600 dan bukannya $700

Jika pelanggan memesan 8 jam dari 11 malam hingga 7 pagi (jumlah blok: 16), harganya ialah $600 dan bukannya $800

Jika pelanggan memesan 6 jam dari 9 malam hingga 3 pagi (jumlah blok: 12), harganya ialah $600

Jika pelanggan memesan 9 malam hingga 4 pagi selama 7 jam (jumlah blok: 14), harganya ialah $600 dan bukannya $700

Jika pelanggan memesan 9 malam hingga 5 pagi selama 8 jam (jumlah blok: 16), harganya ialah $600 dan bukannya $800

Jika pelanggan memesan dalam masa 14 jam dari 9 malam hingga 11 pagi (jumlah blok: 28), harganya ialah $800 dan bukannya $1400

Saya cuba mengikuti artikel ini untuk menetapkan harga berdasarkan tempoh Tempahan WooCommerce dan membuat pelarasan pada masalah saya, tetapi tidak berjaya.

P粉409742142P粉409742142237 hari yang lalu327

membalas semua(1)saya akan balas

  • P粉237029457

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

    Saya telah mencipta coretan kod tetapi tidak nampak sebarang perubahan. Semak pautan ini ke pratonton langsung

    <?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;
    }

    balas
    0
  • Batalbalas