Пользовательское поле оформления заказа включает или отключает способы оплаты в Woocommerce 3 - PullRequest
0 голосов
/ 20 сентября 2018

Итак, я работаю над http://www.lichtunie.nl У нас есть действующая страница оформления заказа с необходимыми полями.Проблема заключается в следующем: в Нидерландах (где мы находимся) у нас есть нечто, называемое KvK, если вы создаете компанию, вам необходимо зарегистрировать ее там и получить номер KvK.Мы можем проверить эти цифры на веб-сайте, чтобы узнать, являются ли они законными и какова их история платежей.

Теперь у нас есть возможность «оплатить чеком», который позволяет вам заказать и оплатить в течение 30 дней после получения счета.Теперь мы хотим, чтобы, когда кто-то не заполнял свое поле номера KvK при оформлении заказа, он не мог использовать этот способ оплаты.

Как только они заполнят поле "KvK number", они смогут это сделать.

Я искал некоторое время и просто не могу понять, каксделай это.Кто-нибудь получил какие-нибудь советы?

Заранее спасибо,

Lex

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Следующий код сохранит только «чек» способа оплаты, если заполнено или существует поле проверки номера KVK для выставления счета:

add_filter( 'woocommerce_available_payment_gateways', 'kvk_field_cheque_payment_method', 20, 1);
function kvk_field_cheque_payment_method( $gateways ){
    foreach( $gateways as $gateway_id => $gateway ) {

        if( WC()->session->get( 'is_kvk_nummer' ) && $gateway_id != 'cheque' ){
            unset( $gateways[$gateway_id] );
        }
    }
    return $gateways;
}

// The Wordpress Ajax PHP receiver
add_action( 'wp_ajax_kvk_nummer', 'get_ajax_kvk_nummer' );
add_action( 'wp_ajax_nopriv_kvk_nummer', 'get_ajax_kvk_nummer' );
function get_ajax_kvk_nummer() {
    if ( $_POST['bkvkn'] == '1' ){
        WC()->session->set('is_kvk_nummer', '1');
    } else {
        WC()->session->set('is_kvk_nummer', '0');
    }
    die();
}

// The jQuery Ajax request
add_action( 'wp_footer', 'checkout_kvk_fields_script' );
function checkout_kvk_fields_script() {
    // Only checkout page
    if( is_checkout() && ! is_wc_endpoint_url() ):

    // Remove "is_kvk_nummer" custom WC session on load
    if( WC()->session->get('is_kvk_nummer') ){
        WC()->session->__unset('is_kvk_nummer');
    }
    ?>
    <script type="text/javascript">
        jQuery( function($){
            var a = 'input#billing_kvk_nummer';

            // Ajax function
            function checkKvkNummer( value ){
                 $.ajax({
                    type: 'POST',
                    url: wc_checkout_params.ajax_url,
                    data: {
                        'action': 'kvk_nummer',
                        'bkvkn': value != '' ? 1 : 0,
                    },
                    success: function (result) {
                        $('body').trigger('update_checkout');
                    }
                });
            }

            // On start
            checkKvkNummer($(a).val());

            // On change event
            $(a).change( function () {
                checkKvkNummer($(this).val());
            });
        });
    </script>
    <?php
    endif;
};

Код сохраняется в файле function.php вашей активной дочерней темы (или активнойтема).Протестировано и работает.

Добавление
Также, чтобы скрыть «чековый» способ оплаты, если поле проверки номера счета KVK не заполнено, замените первую функцию этой:

add_filter( 'woocommerce_available_payment_gateways', 'kvk_field_cheque_payment_method', 20, 1);
function kvk_field_cheque_payment_method( $gateways ){
    foreach( $gateways as $gateway_id => $gateway ) {
        if( $gateway_id != 'cheque' && WC()->session->get( 'is_kvk_nummer' ) ){
            unset( $gateways[$gateway_id] );
        } elseif( $gateway_id == 'cheque' && ! WC()->session->get( 'is_kvk_nummer' ) ){
            unset( $gateways[$gateway_id] );
        }
    }
    return $gateways;
}

Должно работать (не проверено) .

0 голосов
/ 20 сентября 2018

Попробуйте этот код вашей активной темы пользовательского файла js

    $( "#KvK_number" ).change(function() { //Here assign the KvK number ID 
        if (this.val() == "") {
            $('#paying_with_cheque').hide(); /// Here give the Check payment div id
        }
        else
        {
        $('#paying_with_cheque').show();
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...