栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

根据单选按钮显示/隐藏WooCommerce运费

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

根据单选按钮显示/隐藏WooCommerce运费

这是在结帐页面上基于多个单选按钮选择显示隐藏运输方法的正确方法,该方法需要使用PHP,Ajax,jQuery和WC Session。

“企业”
单选按钮(默认选项),

flat_rate:3
以及
flat_rate:4
运输方式将被隐藏,所以客户只能选择
flat_rate:1
flat_rate:2
运输方式。

如果选择了 “住宅”单选按钮

flat_rate:1
flat_rate:2
则将隐藏运输方式,因此客户只能选择
flat_rate:3
flat_rate:4
运输方式。

代码:

// Display a Custom radio buttons fields for shipping optionsadd_action( 'woocommerce_review_order_before_payment','checkout_customer_type_radio_buttons' );function checkout_customer_type_radio_buttons() {    $field_id = 'customer_type';    echo '<div id="customer-type-radio">';    echo '<h3>' . __("Select Your Business Type", "woocommerce") . '</h3>';    // Get the selected radio button value (if selected)    $field_value = WC()->session->get( $field_id );    // Get customer selected value on last past order    if( empty($field_value) )        $field_value = WC()->checkout->get_value( $field_id );    // The default value fallback    if( empty($field_value) )        $field_value = 'Business';    woocommerce_form_field( $field_id, array(        'type' => 'radio',        'class' => array( $field_id ),        'required' => true,        'options' => array( 'Business'      => __('Business', 'woocommerce'), 'Residential'   => __('Residential', 'woocommerce'),        ),    ), $field_value );    echo '</div>';}// Conditionally show/hide shipping methodsadd_filter( 'woocommerce_package_rates', 'shipping_package_rates_filter_callback', 100, 2 );function shipping_package_rates_filter_callback( $rates, $package ) {    $customer_type = WC()->session->get( 'customer_type' ); // Get the customere type    if ( $customer_type === 'Business' ) {        if( isset( $rates['flat_rate:3'] ) ) unset( $rates['flat_rate:3'] );        if( isset( $rates['flat_rate:4'] ) ) unset( $rates['flat_rate:4'] );    }     elseif ( $customer_type === 'Residential' ) {        if( isset( $rates['flat_rate:1'] ) ) unset( $rates['flat_rate:1'] );        if( isset( $rates['flat_rate:2'] ) ) unset( $rates['flat_rate:2'] );    }    return $rates;}// function that gets the Ajax dataadd_action( 'wp_ajax_get_customer_type', 'wc_get_customer_type' );add_action( 'wp_ajax_nopriv_get_customer_type', 'wc_get_customer_type' );function wc_get_customer_type() {    $field_id = 'customer_type';    if ( isset($_POST[$field_id]) && ! empty($_POST[$field_id]) ){        WC()->session->set($field_id, $_POST[$field_id] );    }    echo json_enpre( WC()->session->get( $field_id ) );    die(); // (required)}// The Jquery Ajax scriptadd_action( 'wp_footer', 'custom_checkout_ajax_jquery_script' );function custom_checkout_ajax_jquery_script() {    $field_id = 'customer_type';    if( WC()->session->__isset($field_id) )         WC()->session->__unset($field_id);    // only on checkout when billing company is not defined    if( is_checkout() && ! is_wc_endpoint_url() ):    ?>    <script type="text/javascript">    jQuery( function($){        if (typeof wc_checkout_params === 'undefined')  return false;        var fieldId = 'p#customer_type_field input';        function userTypeTriggerAjax( customerType ){ $.ajax({     type: 'POST',     url: wc_checkout_params.ajax_url,     data: {         'action': 'get_customer_type',         'customer_type': customerType,     },     success: function (result) {         // Trigger refresh checkout         $('body').trigger('update_checkout');         console.log(result);     } });        }        // On start        if( $(fieldId).val() != '' ) { userTypeTriggerAjax( $(fieldId).val() );        }        // On change        $(fieldId).change( function () { userTypeTriggerAjax( $(this).val() );        });    });    </script>    <?php    endif;}// Enabling, disabling and refreshing session shipping methods dataadd_action( 'woocommerce_checkout_update_order_review', 'refresh_shipping_methods', 10, 1 );function refresh_shipping_methods( $post_data ){    $bool = true;    if ( in_array( WC()->session->get('customer_type' ), ['Business', 'Residential'] ) )        $bool = false;    // Mandatory to make it work with shipping methods    foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){        WC()->session->set( 'shipping_for_package_' . $package_key, $bool );    }    WC()->cart->calculate_shipping();}

代码进入您的活动子主题(或活动主题)的functions.php文件中。经过测试和工作。

基于此相关线程的代码:

  • 如果在WooCommerce Checkout中选中了“自定义”复选框,则删除运输成本
  • 根据WooCommerce结帐字段值显示/隐藏送货方式


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号