Итак, я работаю над http://www.lichtunie.nl У нас есть действующая страница оформления заказа с необходимыми полями. Проблема вот в чем: В Нидерландах (где мы находимся) у нас есть нечто, называемое KvK, если вы открываете компанию, вам необходимо зарегистрировать ее там, и вы получите номер KvK. Мы можем проверить эти числа через веб-сайт, чтобы убедиться, что они действительны и какова их история платежей.
Теперь у нас есть возможность «оплатить чеком», что позволяет вам заказывать и платить в течение 30 дней после получения счета. Сейчас мы хотим, чтобы, когда кто-то не заполнял поле своего номера KvK при оформлении заказа, он не мог использовать этот метод оплаты.
Но как только они заполнили поле «KvK number», они должны иметь возможность это сделать.
Я долго искал и просто не могу понять, как это сделать. У кого-нибудь есть советы?
Заранее спасибо,
Лекс
🤔 А знаете ли вы, что...
PHP позволяет встраивать код в HTML-страницы с использованием специальных тегов <?php ?>.
Попробуйте этот код для своего пользовательского 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();
}
});
Следующий код сохранит только способ оплаты "чек", если поле проверки номера 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 ) {
// Not in backend (admin)
if ( is_admin() )
return $gateways;
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;
};
Код находится в файле functions.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Addition
Also to hide "cheque" payment method if billing KVK number checkout field is not filled, replace the first function with this one:
add_filter( 'woocommerce_available_payment_gateways', 'kvk_field_cheque_payment_method', 20, 1);
function kvk_field_cheque_payment_method( $gateways ){
// Not in backend (admin)
if ( is_admin() )
return $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;
}
Должно работать (непроверено).