Heim >Backend-Entwicklung >PHP-Tutorial >Wie aktualisiere ich Gebühren dynamisch basierend auf der Benutzerauswahl im 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!