Heim  >  Artikel  >  Backend-Entwicklung  >  Wie aktualisiere ich Gebühren dynamisch basierend auf der Benutzerauswahl im WooCommerce Checkout?

Wie aktualisiere ich Gebühren dynamisch basierend auf der Benutzerauswahl im WooCommerce Checkout?

Linda Hamilton
Linda HamiltonOriginal
2024-10-20 18:04:31606Durchsuche

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

Dynamische Gebührenaktualisierung basierend auf der Optionsfeldauswahl im WooCommerce Checkout

Bei der Entwicklung eines WooCommerce-Plugins ist es oft notwendig, dynamische Gebühren hinzuzufügen den Bestellvorgang. Ein häufiges Beispiel ist das Anbieten verschiedener Verpackungsoptionen zu unterschiedlichen Kosten, beispielsweise einer Plastiktüte oder einer Geschenkbox. In diesem Artikel werden die besten Möglichkeiten untersucht, dies zu erreichen, und auf Sicherheitsaspekte eingegangen.

Dynamisches Hinzufügen von Gebühren mit 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>

Dieser Code fügt dem Warenkorb dynamisch eine Gebühr hinzu auf dem von $_GET['test'] erhaltenen Wert, der mit JavaScript oder einer Ajax-Anfrage geändert werden kann. Es ist jedoch wichtig zu beachten, dass die Verwendung von $_GET nicht sicher ist und mit Vorsicht verwendet werden sollte.

AJAX-basierte Lösung

Ein sichererer und dynamischerer Ansatz ist Verwenden Sie AJAX, um die Gebühr zu aktualisieren. Der folgende Code bietet eine vollständige Lösung:

<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>

Dieser Code verwendet Ajax, um die ausgewählte Verpackungsoption an den Server zu senden, der sie dann in der WooCommerce-Sitzung speichert. Der Checkout wird dynamisch aktualisiert, ohne dass eine Seitenaktualisierung erforderlich ist.

Fazit

Der Ajax-basierte Ansatz bietet eine sichere und effiziente Methode, um Gebühren dynamisch basierend auf dem Benutzer zu aktualisieren Auswahlmöglichkeiten im WooCommerce-Checkout-Prozess. Es macht $_GET überflüssig und gewährleistet ein reibungsloses und sicheres Checkout-Erlebnis.

Das obige ist der detaillierte Inhalt vonWie aktualisiere ich Gebühren dynamisch basierend auf der Benutzerauswahl im WooCommerce Checkout?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn