Created
April 8, 2025 07:35
-
-
Save xlplugins/0c9ed7f98299bf5d0b2d0551f6196cd6 to your computer and use it in GitHub Desktop.
Funnelkit Checkout: Radio button conditional field
This file contains hidden or 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
class WFACP_Conditional_field_tmp { | |
private $conditional_field = []; | |
public function __construct() { | |
/* Conditional fields */ | |
$this->conditional_field = [ | |
'tax_exempt_yn' => [ /* tax_exempt_yn*/ | |
[ | |
'value' => 'yes', /* tax_exempt_yn*/ | |
'fields' => [ 'tax_exempt_yn_yes' ], /*tax_exempt_yn_yes*/ | |
'enable' => true, | |
], | |
[ | |
'value' => 'no', | |
'fields' => [ '' ], | |
'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 ); | |
} | |
/* Conditional field Logic*/ | |
function wfacp_remove_required( $fields ) { | |
foreach ( $this->conditional_field as $field => $conditional_fields ) { | |
foreach ( $conditional_fields as $conditional_field ) { | |
if ( 'checked' == $conditional_field['value'] ) { | |
$conditional_field['value'] = 1; | |
} | |
if ( ! isset( $_REQUEST[ $field ] ) ) { | |
continue; | |
} | |
if ( isset( $_REQUEST[ $field ] ) && ( false == $conditional_field['enable'] || $_REQUEST[ $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'; | |
} else { | |
if ( strpos( $field_id, 'billing' ) ) { | |
$section = 'billing'; | |
} elseif ( strpos( $field_id, 'shipping' ) ) { | |
$section = 'shipping'; | |
} | |
if ( isset( $fields[ $section ] ) ) { | |
$billing_fields = $fields[ $section ]; | |
foreach ( $billing_fields as $key => $field ) { | |
unset( $fields[ $section ][ $key ]['required'] ); | |
} | |
} | |
} | |
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; | |
} | |
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> | |
div.conditional_field, 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) { | |
check_fiel(values,field); | |
$(document.body).on('change', "input[name='" + field + "']", function () { | |
check_fiel(values,field); | |
}); | |
}); | |
function check_fiel(values,field){ | |
$.each(values, function (key, value) { | |
displayConditionalField(field, value, 'null'); | |
}); | |
} | |
function displayConditionalField(id, values, val) { | |
$.each(values.fields, function (index, field) { | |
var show = false; | |
if (val == 'null') { | |
val = $("input[name='" + id + "']:checked").val(); | |
} | |
if (val == values.value) { | |
show = true; | |
} | |
if (show == true) { | |
$('#' + field + '_field').removeClass('conditional_field'); | |
} else { | |
$('#' + field + '_field').addClass('conditional_field'); | |
} | |
}); | |
} | |
}); | |
</script> | |
<?php | |
} | |
} | |
new WFACP_Conditional_field_tmp(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment