Instantly share code, notes, and snippets.
Last active
May 3, 2024 10:20
-
Save xlplugins/24d8b8f8bdab28aaa5d9405e8f0771f9 to your computer and use it in GitHub Desktop.
Conditional fields using Radio buttonsa
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
class WFACP_Conditional_field_tmp { | |
private $conditional_field = []; | |
public function __construct() { | |
/* Conditional fields */ | |
$this->conditional_field = [ | |
'payment_options_purchase' => [ | |
[ | |
'value' => 'purchase', | |
'fields' => [ '' ], | |
'enable' => false, | |
], | |
[ | |
'value' => 'rent-to-own', | |
'fields' => [ 'rto_term_field' ], | |
'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