WooCommerce — отменить выбор способа оплаты по умолчанию

#javascript #php #ajax #wordpress #woocommerce

#javascript #php #ajax #WordPress #WooCommerce

Вопрос:

Я пытаюсь заставить WooCommerce не выбирать автоматически первый способ оплаты на странице оформления заказа.

Это заставит клиента самостоятельно выбрать способ оплаты и очистить страницу оформления заказа. В настоящее время, когда автоматически выбирается первый способ оплаты, клиенту показывается много платежной информации, относящейся к этому методу, и другие способы оплаты перемещаются вниз по странице. На мобильных устройствах это проблема, поскольку некоторые считают, что это единственный способ оплаты из-за стекирования.

Приведенный ниже JS работает для удаления выбранного способа оплаты по умолчанию.

Однако, когда я пытаюсь затем выбрать способ оплаты, он сначала загружает информацию о шлюзе, но затем исчезает, и выбор удаляется. Я подозреваю, что AJAX вызывает проблему здесь из-за того, как этот раздел перезагружается. Это делает невозможным выбор способа оплаты.

Может ли кто-нибудь помочь расширить этот код, чтобы разрешить выбор шлюза? Большое спасибо

 jQuery(document).ready(function( $ ){
    $( document ).on( 'updated_checkout', function() {
        var $paymentCheckboxes = $( ".woocommerce-checkout-payment" ).find( '[name="payment_method"]');
        $paymentCheckboxes.attr('checked', false);
        $('.payment_box').hide();
    });
});
  

Все способы оплаты не выбраны, что позволяет клиенту видеть, какие методы доступны лучше.

Комментарии:

1. Привет, @Alex: У тебя есть URL-адрес для просмотра? Часто полная картина всех запущенных скриптов может быть очень полезной.

2. @ChrisHeney ссылка 🙂

Ответ №1:

Пожалуйста, протестируйте приведенный ниже код. Вам необходимо использовать событие ‘updated_checkout’ для сброса формы платежного шлюза после ajax-вызова «?wc-ajax= update_order_review».

 jQuery(document).ready(function ($) {
    function deselectDefaultGateway() {
        $('input[name="payment_method"]').each(function (index, item) {
            $(item).attr('checked', false);
        })
        $('.payment_box').hide();
    }

    $(document.body).on('updated_checkout', deselectDefaultGateway);

    $(document).on('click', '.wc_payment_method', function(e){
        if (e.originalEvent !== undefined) {
            $(document.body).off('updated_checkout', deselectDefaultGateway);
        }
    });
});
  

И, к вашему сведению, чтобы предотвратить выбор по умолчанию при загрузке, вы можете использовать приведенный ниже код.

 add_action( 'woocommerce_before_template_part', 'custom_before_template_part', 10, 4 );
function custom_before_template_part($template_name, $template_path, $located, $args) {
    if ( 'checkout/payment-method.php' == $template_name ) {
        $gateway = $args['gateway'];
        $gateway->chosen = false;
    }
}
  

Woocommerce выбирает первый платежный шлюз по умолчанию, но с помощью приведенных выше 2 блоков кода вы можете полностью изменить поведение. Надеюсь, это вам поможет.

Комментарии:

1. Привет! Спасибо за ваш ответ. Я только что протестировал это с добавлением обоих фрагментов. Я могу подтвердить, что способ оплаты не выбран, однако, когда я затем выбираю метод, он появляется для «загрузки», но на самом деле не выбирает метод.

2. Я протестировал код перед публикацией ответа, и он работал хорошо. Я только что повторно протестировал и подтвердил, что код работает правильно на моей стороне. Пожалуйста, проверьте другой ваш код, и если проблема не устранена, свяжитесь со мной напрямую, чтобы я мог помочь вам решить проблему. Спасибо

3. Я только что предоставил ссылку, если это поможет в отладке. У меня запущены оба ваших фрагмента. Ссылка

4. Привет, Алекс, похоже, что это связано с порядком выполнения скрипта между пользовательским кодом и js-кодом woocommerce. Пожалуйста, добавьте меня в skype rsm0128@hotmail.com , чтобы я мог отладить проблему вместе с вами.

Ответ №2:

 Try this code to select default method.
   
 add_action( 'template_redirect', 'define_default_payment_gateway' );
        function define_default_payment_gateway(){
            if( is_checkout() amp;amp; ! is_wc_endpoint_url() ) {
                // HERE define the default payment gateway ID
                $default_payment_id = 'stripe';
        
                WC()->session->set( 'chosen_payment_method', $default_payment_id );
            }
        }
  

Комментарии:

1. Здравствуйте, извините, пожалуйста, прочитайте вопрос полностью. WooCommerce уже выбирает шлюз по умолчанию, идея заключалась в том, чтобы удалить это, чтобы клиенту приходилось выбирать его самостоятельно, без автоматического выбора первого.