php 基于送货方式使结账字段需要付费电话- Woocommerce

tcomlyy6  于 2023-02-03  发布在  PHP
关注(0)|答案(1)|浏览(100)

我想设置计费电话号码需要或不需要的基础上的运输方式。
我已将装运方法设置为数组,并从会话选择的装运方法中对其进行了检查,但它不起作用

add_filter('woocommerce_checkout_fields', 'fire_remove_billing_checkout_fields');

function fire_remove_billing_checkout_fields($fields) {
   
    global $woocommerce;
    $methods = array('flat_rate:2', 'flat_rate:3', 'flat_rate:17', 'flat_rate:20');// Set shipping method to hide the checkout field(s).
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0];



    if(in_array($chosen_shipping, $methods)){

       $fields['billing']['billing_phone'][ 'required' ] = true;
    }else{
       $fields['billing']['billing_phone'][ 'required' ] = false;
    }
    return $fields;
}
wb1gzix0

wb1gzix01#

您的代码对我来说很好用。我已经添加了我的运费ID,它按预期工作,但是刷新页面是必要的,因为WooCommerce不会在update_checkout触发器上本地刷新账单字段。
您应该在updated_checkout事件上使用Javascript/jQuery重新加载页面,或者使用 AJAX 只重新加载账单字段,如下所示:

add_action( 'wp_footer', 'reload_billing_fields_on_updated_checkout' );
function reload_billing_fields_on_updated_checkout() {
    ?>
    <script>
        jQuery(document.body).on('updated_checkout', () => {
            jQuery('.woocommerce-billing-fields').load(`${location.href} .woocommerce-billing-fields>*`, '');
        });
    </script>
    <?php
}

请记住,重新加载这些字段可能需要一段时间,因此您可能需要添加一些加载CSS类,或者一个微调器。

相关问题