'WooCommerce checkout: How to set field as required if another one is filled + how to autofill field with data from another field

I am looking for solution for my problems in checkout. First problem is that I need to make field company ID as required if field "Buy as company" is checked. ID of company checkbox is "wi_as_company". I am try to make it like code bellow, but it makes field "billing_company_wi_id" always as required (also for non-company customers).

add_filter( 'woocommerce_checkout_fields' , 'company_checkbox_and_new_checkout_fields_1', 9999 );
function company_checkbox_and_new_checkout_fields_1( $fields ) {
        if (isset($_POST['wi_as_company'])) {          
            $fields['billing']['billing_company_wi_id']['required'] = false;
            } else {
            $fields['billing']['billing_company_wi_id']['required'] = true;  
        }
return $fields;
}

My second problem is that I want to move data (first 8 numbers) automatically from one field to another one and add 2 letters before. One field have this format:

12345678-Y-YY

and I want to move first 8 characters to another field like this:

XX12345678

I will be very grateful for any suggestions.



Solution 1:[1]

ANSWER FOR FIRST PROBLEM: If checkbox is checked, then field company ID is required. Write code bellow to your child themes functions.php file and change ID of elements: wi_as_company is ID of checkbox and billing_company_wi_id is ID of required field if checkbox is checked

add_action( 'woocommerce_checkout_process', 'afm_validation' ); 
function afm_validation() {     
    if ( isset($_POST['wi_as_company']) && isset($_POST['billing_company_wi_id']) && empty($_POST['billing_company_wi_id']) ) {         
        wc_add_notice( __("Please fill company ID"), "error" );     
    }
 }

Solution 2:[2]

ANSWER FOR SECOND PROBLEM: Change in code ID of fields and number of characters to copy. In this case it will copy first 8 characters from "billing_company_wi_tax" to "billing_company_wi_vat" plus it will add letters "XX" before copied text. Insert this function to your child themes functions.php.

add_action( 'wp_footer', 'copy_field', 9999 );
function copy_field() {
   global $wp;
   if ( is_checkout() ) {
      echo '<script> document.getElementById("billing_company_wi_tax").setAttribute("onkeyup","URLChange(this.value);");
        function URLChange(titlestr) {
        var url=titlestr.replace(/ /g,"-");
        url = url.substring(0, 8);
        document.getElementsByName("billing_company_wi_vat")[0].value="XX"+url;
      }</script>';
   }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 rptr90
Solution 2 rptr90