内容简介:翻译自:https://stackoverflow.com/questions/32119053/woocommerce-custom-checkout-field-to-add-fee-to-order-ajax
我试图在结账时向订单总额支付定制费用.
我在woocommerce中添加了一个复选框
add_action( 'woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout' ); function add_box_option_to_checkout( $checkout ) { echo '<div id="message_fields">'; woocommerce_form_field( 'add_gift_box', array( 'type' => 'checkbox', 'class' => array('add_gift_box form-row-wide'), 'label' => __('Ilość pudełek ozdobnych - 25 PLN/szt'), 'placeholder' => __(''), ), $checkout->get_value( 'add_gift_box' )); }
包含一个可以处理事件的自定义js文件
jQuery( document ).ready(function( $) { $('#add_gift_box').click(function(){ var data = { action: 'woocommerce_add_gift_box', state: '200', }; jQuery.ajax({ type: 'POST', url: wc_checkout_params.ajax_url, data: data, success: function (code) { console.log(code); jQuery('body').trigger('update_checkout'); }, dataType: 'html' }); }); });
还有一个 php 费用处理功能
function woo_add_cart_fee( $data ){ if ( is_admin() && ! defined( 'DOING_AJAX' ) || ! $_POST ) return; $extracost = 0; if (isset($_POST['state'])) { $extracost = intval($_POST['state']); } WC()->cart->add_fee( 'Ozdobne pudełka:', $extracost ); } add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' ); add_action('wp_ajax_woocommerce_add_gift_box', 'woo_add_cart_fee', 10); add_action('wp_ajax_nopriv_woocommerce_add_gift_box', 'woo_add_cart_fee', 10);
由于某些原因,$_POST [‘state’]的值没有添加,当我给出一个硬编码值时,该函数有效,我尝试了很多选项,但是无法使其工作.
我见过类似的帖子,但没有一个人有答案.
后期数据由’post_data’中的AJAX函数发送,序列化.因此,要获取复选框的值,您只需要parse_str()这个!
parse_str( $_POST['post_data'], $post_data );
然后你可以从$post_data [‘add_gift_box’]获得’add_gift_box’选项.请注意,订单完成后,此’post_data’元素不再可用,所有内容都在$_POST中.
完整示例,基于您的代码:
1)将复选框添加到结帐中
add_action( 'woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout' ); function add_box_option_to_checkout( $checkout ) { echo '<div id="message_fields">'; woocommerce_form_field( 'add_gift_box', array( 'type' => 'checkbox', 'class' => array('add_gift_box form-row-wide'), 'label' => __('Ilość pudełek ozdobnych - 25 PLN/szt'), 'placeholder' => __(''), ), $checkout->get_value( 'add_gift_box' )); echo '</div>'; }
2)单击复选框时更新购物车的脚本(无需额外的AJAX请求!)
add_action( 'wp_footer', 'woocommerce_add_gift_box' ); function woocommerce_add_gift_box() { if (is_checkout()) { ?> <script type="text/javascript"> jQuery( document ).ready(function( $) { $('#add_gift_box').click(function(){ jQuery('body').trigger('update_checkout'); }); }); </script> <?php } }
3)增加费用的行动
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' ); function woo_add_cart_fee( $cart ){ if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) { return; } if ( isset( $_POST['post_data'] ) ) { parse_str( $_POST['post_data'], $post_data ); } else { $post_data = $_POST; // fallback for final checkout (non-ajax) } if (isset($post_data['add_gift_box'])) { $extracost = 25; // not sure why you used intval($_POST['state']) ? WC()->cart->add_fee( 'Ozdobne pudełka:', $extracost ); } }
翻译自:https://stackoverflow.com/questions/32119053/woocommerce-custom-checkout-field-to-add-fee-to-order-ajax
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- php – WooCommerce结帐字段的自定义验证
- springboot~DTO字符字段与日期字段的转换问题
- Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射
- Protocol Buffers 学习(2):字段类型和其他语言字段类型之间的映射
- PHPRAP 2.0.2 发布,接口和字段数据分离,字段使用单独数据表
- 如何正确新增字段
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。