niestandardowe typy wpisów – wstępnie zdefiniowany stan pola wyboru/przycisku radiowego na podstawie wartości przechowywanej w polach ACF w formularzu realizacji zamówienia WooCommerce
Utworzyłem pola niestandardowe za pomocą acf i utworzyłem formularz, aby uzyskać dane wejściowe przechowywane w tych polach jako metadane użytkownika, teraz użyłem wartości tych pól i wyświetliłem je na formularzu realizacji transakcji jako niestandardowe pola realizacji transakcji, wszystkie wartości pól są wyświetlane poprawnie, jedynym problemem, z którym się borykam, jest typ pola wyboru, w którym przekazana wartość nie jest wyświetlana w stanie zaznaczonym lub niezaznaczonym, próbowałem zmienić typ pola na radio, również ten sam problem w zależności od wartości, powinna być w stanie zaznaczonym, ale nie jest w stanie zaznaczonym
Wartość ACF jest przechowywana w ndis_authority_to_leave_shipment
Pole niestandardowe przycisku radiowego
// Radio buttons for Authority to Leave Shipment
$ndis_authority_to_leave_shipment = get_user_meta($user->ID, 'ndis_authority_to_leave_shipment', true);
woocommerce_form_field('ndis_authority_to_leave_shipment', array(
'type' => 'radio',
'class' => array('ndis-authority-to-leave-shipment form-row-wide'),
'label' => __('Authority to Leave Shipment (Yes/No)'),
'options' => array(
'yes' => 'Yes',
'no' => 'No',
),
'default' => $ndis_authority_to_leave_shipment,
), $ndis_authority_to_leave_shipment);
JQuery do obsługi wartości
add_action('wp_footer', 'ndis_custom_checkout_fields_jquery');
function ndis_custom_checkout_fields_jquery() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var $radioYes = $('input[name="ndis_authority_to_leave_shipment"][value="yes"]');
var $radioNo = $('input[name="ndis_authority_to_leave_shipment"][value="no"]');
var storedValue="<?php echo get_user_meta(get_current_user_id(), "ndis_authority_to_leave_shipment', true); ?>';
// Set initial state
if (storedValue === 'yes') {
$radioYes.prop('checked', true);
} else if (storedValue === 'no') {
$radioNo.prop('checked', true);
}
// Update value on change
$('input[name="ndis_authority_to_leave_shipment"]').on('change', function() {
if ($radioYes.is(':checked')) {
$radioYes.val('yes');
$radioNo.val('no');
} else if ($radioNo.is(':checked')) {
$radioNo.val('no');
$radioYes.val('yes');
}
});
});
</script>
<?php
}
}
Pole niestandardowe pola wyboru
// Checkbox field
$ndis_authority_to_leave_shipment = get_user_meta($user->ID, 'ndis_authority_to_leave_shipment', true);
woocommerce_form_field('ndis_authority_to_leave_shipment', array(
'type' => 'checkbox',
'class' => array('ndis-authority-to-leave-shipment form-row-wide'),
'label' => __('Authority to Leave Shipment (Yes/No)'),
'default' => $ndis_authority_to_leave_shipment === 'yes' ? '1' : '0',
), $ndis_authority_to_leave_shipment === 'yes' ? '1' : '0');
jQuery do obsługi wartości pola wyboru
add_action('wp_footer', 'ndis_custom_checkout_fields_jquery');
function ndis_custom_checkout_fields_jquery() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var $checkbox = $('#ndis_authority_to_leave_shipment');
// Set initial state
if ($checkbox.val() === '1') {
$checkbox.prop('checked', true);
} else {
$checkbox.prop('checked', false);
}
// Update value on change
$checkbox.on('change', function() {
if ($(this).is(':checked')) {
$(this).val('1');
} else {
$(this).val('0');
}
});
// Trigger change to set initial value
$checkbox.trigger('change');
});
</script>
<?php
}
}
A gdy używam pola wyboru, otrzymuję status zaznaczenia, gdy wartość wynosi „tak”, ale gdy zmienię wartość na „nie”, to stan nie zmienia się na odznaczone.
Gdzie robię źle, proszę daj mi znać