Пользовательская кнопка-переключатель Woocommerce используется на странице моей учетной записи - PullRequest
0 голосов
/ 01 ноября 2019

Я занимаюсь разработкой сайта woocommerce и добавил пользовательскую кнопку-переключатель для страницы оформления заказа, мне нужно использовать такую ​​же кнопку-переключатель оформления заказа на странице «Моя учетная запись», здесь мой код и его работа отлично работает на странице оформления заказа

<?php if (!function_exists('custom_checkout_question_field'))
{
    /**
     * Add custom question field after the billing form fields
     */
    function custom_checkout_question_field($checkout)
    {

        echo "<div class='custom-question-field-wrapper custom-question-1'>";

        echo sprintf('<p>%s</p>', __("Şahıs/Firma"));

        woocommerce_form_field('sahıs_veya_firma', array(
            'type' => 'radio',
            'required' => true,
            'class' => array(
                'custom-question-field',
                'form-row-wide'
            ) ,
            'options' => array(
                'sahıs' => 'Şahıs',
                'firma' => 'Firma',
            ) ,
        ) , $checkout->get_value('sahıs_veya_firma'));

        woocommerce_form_field('tc_no', array(
            'type' => 'text',
            'label' => 'TC No',
            'required' => true,
            'class' => array(
                'custom-question-codice-fiscale-field',
                'form-row-wide'
            ) ,
        ) , $checkout->get_value('tc_no'));

        woocommerce_form_field('firma_ismi', array(
            'type' => 'text',
            'label' => 'Firma İsmi',
            'required' => true,
            'class' => array(
                'custom-question-p-iva-field',
                'form-row-wide'
            ) ,
        ) , $checkout->get_value('firma_ismi'));

        woocommerce_form_field('vergi_no', array(
            'type' => 'text',
            'label' => 'Firma Vergi No',
            'required' => true,
            'class' => array(
                'custom-question-ragione-sociale-field',
                'form-row-wide'
            ) ,
        ) , $checkout->get_value('vergi_no'));

        woocommerce_form_field('vergi_dairesi', array(
            'type' => 'text',
            'label' => 'Vergi Dairesi',
            'required' => true,
            'class' => array(
                'custom-question-ragione-sociale-field',
                'form-row-wide'
            ) ,
        ) , $checkout->get_value('vergi_dairesi'));

        echo "</div>";

    }

    add_action('woocommerce_before_checkout_billing_form', 'custom_checkout_question_field');
}

if (!function_exists('custom_question_conditional_javascript'))
{
    function custom_question_conditional_javascript()
    {
?>
    <script type="text/javascript">
        (function() {

            // Check if jquery exists
            if(!window.jQuery) {
                return;
            };

            var $ = window.jQuery;

            $(document).ready(function() {

                var questionField       = $('.custom-question-field'),
                    codiceFiscaleField  = $('.custom-question-codice-fiscale-field'),
                    pIvaField           = $('.custom-question-p-iva-field'),
                    ragioneSocialeField = $('.custom-question-ragione-sociale-field ');

                // Check that all fields exist
                if(
                    !questionField.length ||
                    !codiceFiscaleField.length ||
                    !pIvaField.length ||
                    !ragioneSocialeField.length
                ) {
                    return;
                }

                function toggleVisibleFields() {
                    var selectedAnswer = questionField.find('input:checked').val();

                    if(selectedAnswer === 'sahıs') {
                        codiceFiscaleField.show();
                        pIvaField.hide();
                        ragioneSocialeField.hide();
                    } else if(selectedAnswer === 'firma') {
                        codiceFiscaleField.hide();
                        pIvaField.show();
                        ragioneSocialeField.show();
                    } else {
                        codiceFiscaleField.hide();
                        pIvaField.hide();
                        ragioneSocialeField.hide();
                    }
                }

                $(document).on('change', 'input[name=sahıs_veya_firma]', toggleVisibleFields);
                $(document).on('updated_checkout', toggleVisibleFields);

                toggleVisibleFields();

            });
        })();
    </script>
    <?php
    }

    add_action('wp_footer', 'custom_question_conditional_javascript', 1000);
}

if (!function_exists('custom_checkout_question_get_field_values'))
{
    /**
     * Get all form field values based on user submitted post data
     *
     */
    function custom_checkout_question_get_field_values()
    {
        $fields = ['sahıs_veya_firma' => '', 'tc_no' => '', 'firma_ismi' => '', 'vergi_no' => '', 'vergi_dairesi' => '', ];

        foreach ($fields as $field_name => $value)
        {
            if (!empty($_POST[$field_name]))
            {
                $fields[$field_name] = sanitize_text_field($_POST[$field_name]);
            }
            else
            {
                unset($fields[$field_name]);
            }
        }

        return $fields;
    }
}

if (!function_exists('custom_checkout_question_field_validate'))
{
    /**
     * Custom woocommerce field validation to prevent user for completing checkout
     */
    function custom_checkout_question_field_validate()
    {
        $field_values = custom_checkout_question_get_field_values();

        if (empty($field_values['sahıs_veya_firma']))
        {
            wc_add_notice('Lütfen Şahıs / Firma sorusu için bir cevap seçiniz.', 'error');
        }

        if ($field_values['sahıs_veya_firma'] === 'sahıs' && empty($field_values['tc_no']))
        {
            wc_add_notice('Lütfen TC No girin', 'error');
        }

        if ($field_values['sahıs_veya_firma'] === 'firma' && empty($field_values['firma_ismi']))
        {
            wc_add_notice('Lütfen şahıs veya firma olduğunuzu belirtiniz', 'error');
        }

        if ($field_values['sahıs_veya_firma'] === 'firma' && empty($field_values['vergi_no']))
        {
            wc_add_notice('Lütfen Firma Vergi No giriniz.', 'error');
        }

        if ($field_values['sahıs_veya_firma'] === 'firma' && empty($field_values['vergi_dairesi']))
        {
            wc_add_notice('Lütfen Vergi Dairesi\'ni giriniz.', 'error');
        }

    }

    add_action('woocommerce_checkout_process', 'custom_checkout_question_field_validate');
}

if (!function_exists('custom_checkout_question_field_save'))
{
    /**
     * Update order post meta based on submitted form values
     *
     * @param Integer $order_id New order id
     */
    function custom_checkout_question_field_save($order_id)
    {
        $field_values = custom_checkout_question_get_field_values();

        foreach ($field_values as $field_name => $value)
        {
            if (!empty($field_values[$field_name]))
            {
                update_post_meta($order_id, $field_name, $value);
            }
        }
    }

    add_action('woocommerce_checkout_update_order_meta', 'custom_checkout_question_field_save');
}

Это полный код, который я использовал, и его работа, мне нужно использовать одно и то же для своей страницы аккаунта и сохранять данные в каждом профиле пользователя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...