Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana Mengemas kini Yuran Secara Dinamik Berdasarkan Pilihan Pengguna dalam WooCommerce Checkout?

Bagaimana Mengemas kini Yuran Secara Dinamik Berdasarkan Pilihan Pengguna dalam WooCommerce Checkout?

Linda Hamilton
Lepaskan: 2024-10-20 18:04:31
asal
683 orang telah melayarinya

How to Dynamically Update Fees Based on User Selections in WooCommerce Checkout?

Kemas Kini Yuran Dinamik Berdasarkan Pemilihan Butang Radio dalam WooCommerce Checkout

Apabila membangunkan pemalam WooCommerce, selalunya perlu menambah yuran dinamik kepada proses pembayaran. Satu contoh biasa ialah menawarkan pilihan pembungkusan yang berbeza dengan kos yang berbeza-beza, seperti beg plastik atau kotak hadiah. Artikel ini meneroka cara terbaik untuk mencapai perkara ini dan menangani pertimbangan keselamatan.

Penambahan Yuran Dinamik Menggunakan WC_Cart

<code class="php">function at87_add_custom_fees( WC_Cart $cart ){
    $fees = 3; // fee amount
    $fees = isset($_GET['test']) ? $_GET['test'] : 3;

    $cart->add_fee( 'Emballagegebyr', intval($fees));
}</code>
Salin selepas log masuk

Kod ini menambahkan yuran pada troli berdasarkan dinamik pada nilai yang diperoleh daripada $_GET['test'], yang boleh diubah suai menggunakan JavaScript atau permintaan Ajax. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menggunakan $_GET adalah tidak selamat dan harus digunakan dengan berhati-hati.

Penyelesaian Berasaskan AJAX

Pendekatan yang lebih selamat dan dinamik adalah untuk gunakan AJAX untuk mengemas kini yuran. Kod berikut menyediakan penyelesaian lengkap:

<code class="php">// Ajax script
add_action( 'wp_footer', 'checkout_shipping_packing_script' );
function checkout_shipping_packing_script() {
    if ( ! is_checkout() )
        return;

    ?>
    <script type="text/javascript">
    jQuery( function($){
        $('form.checkout').on('change', 'input[name=radio_packing]', function(e){
            e.preventDefault();
            var p = $(this).val();
            $.ajax({
                type: 'POST',
                url: wc_checkout_params.ajax_url,
                data: {
                    'action': 'woo_get_ajax_data',
                    'packing': p,
                },
                success: function (result) {
                    $('body').trigger('update_checkout');
                    console.log('response: '+result); // just for testing | TO BE REMOVED
                },
                error: function(error){
                    console.log(error); // just for testing | TO BE REMOVED
                }
            });
        });
    });
    </script>
    <?php
}

// Ajax request handler
add_action( 'wp_ajax_woo_get_ajax_data', 'woo_get_ajax_data' );
add_action( 'wp_ajax_nopriv_woo_get_ajax_data', 'woo_get_ajax_data' );
function woo_get_ajax_data() {
    if ( isset($_POST['packing']) ){
        $packing = sanitize_key( $_POST['packing'] );
        WC()->session->set('chosen_packing', $packing );
        echo json_encode( $packing );
    }
    die(); // Alway at the end (to avoid server error 500)
}</code>
Salin selepas log masuk

Kod ini menggunakan Ajax untuk menghantar pilihan pembungkusan yang dipilih ke pelayan, yang kemudiannya menyimpannya dalam sesi WooCommerce. Pembayaran dikemas kini secara dinamik tanpa memerlukan muat semula halaman.

Kesimpulan

Pendekatan berasaskan Ajax menyediakan kaedah yang selamat dan cekap untuk mengemas kini yuran secara dinamik berdasarkan pengguna pilihan dalam proses pembayaran WooCommerce. Ia menghapuskan keperluan untuk $_GET dan memastikan pengalaman daftar keluar yang lancar dan selamat.

Atas ialah kandungan terperinci Bagaimana Mengemas kini Yuran Secara Dinamik Berdasarkan Pilihan Pengguna dalam WooCommerce Checkout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan