WordPress

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

  • 29 lipca, 2024
  • 3 min read
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
    }
}


Korzystając z powyższego, nie otrzymuję żadnego sprawdzonego stanu na podstawie wartości

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.

Warto przeczytać!  Porady dotyczące wydajności WordPress autorstwa znanych ekspertów WordPress

Gdzie robię źle, proszę daj mi znać


Źródło