Last active
April 14, 2022 13:55
-
-
Save xlplugins/9500e2954311c6588226daf80c1e7a3f to your computer and use it in GitHub Desktop.
Conditional field for Radio button in Aerocheckout
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class WFACP_Conditional_field { | |
private $conditional_field = []; | |
public function __construct() { | |
$this->conditional_field = [ | |
'user_type' => [ | |
[ | |
'value' => 'invoice', | |
'fields' => [ 'company_name', 'company_vat'], | |
'enable' => true, | |
], | |
] | |
]; | |
add_action( 'wfacp_after_checkout_page_found', [ $this, 'wfacp_add_script' ] ); | |
add_filter( 'woocommerce_checkout_fields', [ $this, 'wfacp_remove_required' ], 10, 1 ); | |
add_filter( 'wfacp_custom_fields', [ $this, 'wfacp_remove_field' ], 10, 1 ); | |
} | |
function wfacp_add_script() { | |
add_action( 'wp_footer', [ $this, 'wfacp_conditional_field_script' ] ); | |
} | |
function wfacp_conditional_field_script() { | |
$fields = json_encode( $this->conditional_field ); | |
?> | |
<style> | |
p.conditional_field { | |
display: none !important; | |
} | |
.wfacp_dropdown option, .wfacp_dropdown select { | |
text-transform: capitalize; | |
} | |
</style> | |
<script> | |
jQuery(document).ready(function ($) { | |
var conditional_fields =<?php echo $fields;?>; | |
$.each(conditional_fields, function (field, values) { | |
$.each(values, function (key, value) { | |
displayConditionalField(field, value, 'null'); | |
$(document.body).on('change', '#' + field+'_field input', function () { | |
var id = $(this).attr('id'); | |
var val = $(this).val(); | |
displayConditionalField(id, value, val); | |
}); | |
// console.log(values); | |
}); | |
}); | |
function displayConditionalField(id, values, val) { | |
$.each(values.fields, function (index, field) { | |
var show = false; | |
if (val == 'null') { | |
val = $('#' + id+'_field input').val(); | |
} | |
// console.log(field,val,values.value,values.enable); | |
if (val == values.value) { | |
var show = true; | |
} | |
if (show && values.enable) { | |
$('#' + field + '_field').removeClass('conditional_field'); | |
} else { | |
$('#' + field + '_field').addClass('conditional_field'); | |
} | |
}); | |
} | |
}); | |
</script> | |
<?php | |
} | |
function wfacp_remove_required( $fields ) { | |
foreach ( $this->conditional_field as $field => $conditional_fields ) { | |
foreach ( $conditional_fields as $conditional_field ) { | |
if ( ! isset( $_REQUEST[ $field ] ) || false == $conditional_field['enable'] || $_POST[ $field ] == $conditional_field['value'] ) { | |
continue; | |
} | |
foreach ( $conditional_field['fields'] as $field_id ) { | |
$section = ''; | |
if ( isset( $fields['billing'][ $field_id ] ) ) { | |
$section = 'billing'; | |
} elseif ( isset( $fields['shipping'][ $field_id ] ) ) { | |
$section = 'shipping'; | |
} elseif ( isset( $fields['advanced'][ $field_id ] ) ) { | |
$section = 'advanced'; | |
} | |
if ( ! empty( $section ) ) { | |
unset( $fields[ $section ][ $field_id ]['required'] ); | |
} | |
} | |
} | |
} | |
return $fields; | |
} | |
function wfacp_remove_field( $fields ) { | |
foreach ( $this->conditional_field as $field => $conditional_fields ) { | |
foreach ( $conditional_fields as $conditional_field ) { | |
$field_value=isset($_REQUEST[ $field ])?$_REQUEST[ $field ]:''; | |
if(!empty($_REQUEST[ $field ]) && $conditional_field['value']=='checked'){ | |
$field_value='checked'; | |
} | |
if ( ! isset( $_REQUEST[ $field ] ) || ( false == $conditional_field['enable'] || $field_value == $conditional_field['value'] ) ) { | |
continue; | |
} | |
foreach ( $conditional_field['fields'] as $field_id ) { | |
if ( ! empty( $fields['advanced'][ $field_id ] ) ) { | |
unset( $fields['advanced'][ $field_id ] ); | |
} | |
} | |
} | |
} | |
return $fields; | |
} | |
} | |
new WFACP_Conditional_field(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment