#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 уже выбирает шлюз по умолчанию, идея заключалась в том, чтобы удалить это, чтобы клиенту приходилось выбирать его самостоятельно, без автоматического выбора первого.