Created
February 21, 2020 07:54
-
-
Save xlplugins/dc4be5bb27e05a9efd5e0954c639e230 to your computer and use it in GitHub Desktop.
snippet for conditional field 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 = [ | |
'business_delivery' => [ | |
[ | |
'value' => 'checked', | |
'fields' => [ 'shipping_company' ], | |
'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, function () { | |
var id = $(this).attr('id'); | |
var val = $(this).val(); | |
if($(this).parent('checkbox')){ | |
if ($(this).prop("checked")) { | |
val='checked'; | |
} | |
} | |
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).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 ) { | |
if ( ! isset( $_REQUEST[ $field ] ) || ( false == $conditional_field['enable'] || $_REQUEST[ $field ] == $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