动态运费基于Woocommerce中的自定义单选按钮

在Woocommerce中,我在结帐页面上添加了两个自定义单选按钮,点击后,我调用了一个ajax函数来添加交付费用。

这是我的代码:

$(document).on('change','#shipping_method_0_local_pickup5',function(e) { $('.woocommerce-shipping-fields').css({ 'display': 'none' }); $("#deli").css("display","block"); var selected = $("input[type='radio'][name='post-del']:checked"); var selectedVal = selected.val(); var pickurl= "?action=delivery"; $.ajax({ url: pickurl, type: "POST", data:{ input:selectedVal, }, success: function(responseText) { jQuery(".order-total .woocommerce-Price-amount").html(responseText); //$(".discount_code").css("display","block"); } }); }); 

单击单选按钮时,我想在总计上添加2美元的额外价格。

 add_action( 'wp_ajax_delivery', 'delivery' ); add_action( 'wp_ajax_nopriv_delivery', 'delivery' ); function delivery() { //My code do_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' ); // not working exit; } 

注意:这是更新代码的钩子

 add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' ); function prefix_add_discount_line( $cart ) { $discount = $cart->subtotal + 2; $cart->add_fee( __( 'Delivery', 'yourtext-domain' ) , +$discount ); } 

您应该在问题中提供所有必要的相关代码 。 请记住, “寻求调试帮助的问题(”为什么这段代码不起作用?“)必须包括所需的行为,特定的问题或错误以及在问题本身中重现它所需的最短代码

因此,在下面的代码中,您将找到一个完整的工作解决方案,其中包含额外的自定义单选按钮,这将根据所选的单选按钮和“本地取件”送货方式动态添加送货费。

在此处输入图像描述

代码(您需要在其中定义目标“本地代答”方法ID)

 // Enabling delivery options for a specific defined shipping method function targeted_shipping_method(){ // HERE below define the shipping method Id that enable the custom delivery options return 'local_pickup:5'; } // Customizing Woocommerce checkout radio form field add_action( 'woocommerce_form_field_radio', 'custom_form_field_radio', 20, 4 ); function custom_form_field_radio( $field, $key, $args, $value ) { if ( ! empty( $args['options'] ) && is_checkout() ) { $field = str_replace( '
session->get( 'chosen_shipping_methods' )[0] == targeted_shipping_method() ) : echo '' . __('Delivery options', $domain) . ''; $chosen = WC()->session->get('chosen_delivery'); $chosen = empty($chosen) ? WC()->checkout->get_value('delivery') : $chosen; $chosen = empty($chosen) ? 'regular' : $chosen; // Add a custom checkbox field woocommerce_form_field( 'radio_delivery', array( 'type' => 'radio', 'class' => array( 'form-row-wide' ), 'options' => array( 'regular' => __('Regular', $domain), 'premium' => __('Premium +'.wc_price(2.00), $domain), ), 'default' => $chosen, ), $chosen ); echo ''; endif; } // jQuery - Ajax script add_action( 'wp_footer', 'checkout_delivery_script' ); function checkout_delivery_script() { // Only checkout page if ( ! is_checkout() ) return; ?> session->set('chosen_delivery', sanitize_key( $_POST['delivery'] ) ); echo json_encode( $delivery ); // Return the value to jQuery } die(); } // Add a custom dynamic delivery fee add_action( 'woocommerce_cart_calculate_fees', 'add_packaging_fee', 20, 1 ); function add_packaging_fee( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; // Only for targeted shipping method if ( WC()->session->get( 'chosen_shipping_methods' )[0] != targeted_shipping_method() ) return; if( WC()->session->get( 'chosen_delivery' ) == 'premium' ) $cart->add_fee( __( 'Delivery fee', 'woocommerce' ), 2.00 ); }

代码位于活动子主题(或活动主题)的function.php文件中。 经过测试和工作。