Я создаю новый пользовательский плагин оплаты для моего веб-сайта Woo Commerce. I В этом мне нужно добавить некоторые пользовательские проверки для кредитной карты и некоторые другие поля ввода. Мне нужно добавить все эти проверки в отдельный файл js, и я хотел запустить функцию проверки только после успешного прохождения проверки javascript.
Я могу загрузить JS с помощью wp_enqueue_scripts
функция, но мой код js не выполняется после нажатия кнопки оформления заказа.
Я хочу, чтобы при оформлении заказа сначала нужно было выполнить мой код, и на основе проверки проверки необходимо перейти к функции проверки.
WooCommerce связывает событие в форме заказа и использует AJAX для отправки формы (вы можете увидеть код в checkout.js).
Вот мое решение:
1. Замените оригинальную кнопку отправки своей собственной кнопкой.
в functions.php
add_filter('woocommerce_order_button_html', function(){
return '<button class="new_submit button">Place Order</button>';
});
При нажатии на новую кнопку он не будет отправлять форму заказа напрямую.
2. Привязать событие к новой кнопке
jQuery(document).on('click', '.new_submit', function(e){
e.preventDefault();
if (do_the_validation()){
jQuery( 'form.checkout' ).submit();
} else {
return false;
}
})
Кроме того, я бы порекомендовал вам сделать проверку на стороне сервера
add_action('woocommerce_checkout_process', 'my_validation');
function my_validation() {
//If it's invalid, add an error.
if (!do_validation()) {
wc_add_notice( __( 'Something goes wrong!' ), 'error' );
}
}
Других решений пока нет …