Skip to content

Instantly share code, notes, and snippets.

@xlplugins
Last active May 3, 2024 10:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xlplugins/24d8b8f8bdab28aaa5d9405e8f0771f9 to your computer and use it in GitHub Desktop.
Save xlplugins/24d8b8f8bdab28aaa5d9405e8f0771f9 to your computer and use it in GitHub Desktop.
Conditional fields using Radio buttonsa
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