基于 WooCommerce Checkout 中单选按钮选择的动态费用更新
开发 WooCommerce 插件时,通常需要添加动态费用结账流程。一个常见的例子是提供不同成本的不同包装选项,例如塑料袋或礼品盒。本文探讨了实现此目的的最佳方法并解决了安全注意事项。
使用 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>
此代码基于动态向购物车添加费用从 $_GET['test'] 获取的值,可以使用 JavaScript 或 Ajax 请求进行修改。但是,需要注意的是,使用 $_GET 并不安全,应谨慎使用。
基于 AJAX 的解决方案
更安全和动态的方法是使用 AJAX 更新费用。以下代码提供了完整的解决方案:
<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>
此代码利用 Ajax 将选定的打包选项发送到服务器,然后服务器将其保存在 WooCommerce 会话中。结帐动态更新,无需刷新页面。
结论
基于 Ajax 的方法提供了一种安全高效的方法来根据用户动态更新费用WooCommerce 结账流程中的选择。它消除了对 $_GET 的需求,并确保流畅、安全的结账体验。
以上是如何根据 WooCommerce Checkout 中的用户选择动态更新费用?的详细内容。更多信息请关注PHP中文网其他相关文章!