Попытка запретить клиентам нажимать кнопку «Перейти к оплате» до тех пор, пока не будет введен почтовый индекс. Однако обнаружил, что с функцией ниже, что если вы измените количество и обновите корзину — функция больше не работает, и вы можете осуществить платеж без доставки. Есть идеи?
add_action('wp_head','prevent_proceed_to_checkout');
function prevent_proceed_to_checkout() {
echo 'alert(Please enter postcode before payment!")';
}
Обновлено — 3 способа — (Добавлена альтернатива)
1) Вы можете использовать следующий код, который будет «не переходить к оформлению заказа», если почтовый индекс не был заполнен:
// Avoiding checkout when postcode has not been entered
add_action( 'woocommerce_check_cart_items', 'check_shipping_postcode' ); // Cart and Checkout
function check_shipping_postcode() {
$customer = WC()->session->get('customer');
if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) ){
// Display an error message
wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
На странице корзины:
На странице оформления заказа:
2) Попробуйте этот альтернативный способ (который проверяет почтовый индекс и перенаправляет в корзину, избегая оформления заказа):
add_action('template_redirect', 'check_shipping_postcode');
function check_shipping_postcode() {
// Only on checkout page (and cart for the displayed message)
if ( ( is_checkout() && ! is_wc_endpoint_url() ) || is_cart() ) {
$customer = WC()->session->get('customer');
if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) ){
wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
if( ! is_cart() ){
wp_redirect(wc_get_cart_url());
exit();
}
}
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
На странице корзины:
3) Сочетание обоих выше (избегая страницы оформления заказа):
// Avoiding checkout when postcode has not been entered
add_action( 'woocommerce_check_cart_items', 'check_shipping_postcode' ); // Cart and Checkout
function check_shipping_postcode() {
$customer = WC()->session->get('customer');
if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) ){
// Display an error message
wc_add_notice( __("Please enter your postcode before checkout", "woocommerce"), 'error' );
}
}
add_action('template_redirect', 'shipping_postcode_redirection');
function shipping_postcode_redirection() {
// Only on checkout page
if ( is_checkout() && ! is_wc_endpoint_url() ) {
$customer = WC()->session->get('customer');
if( ! $customer['calculated_shipping'] || empty( $customer['shipping_postcode'] ) ){
wp_redirect(wc_get_cart_url());
exit();
}
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
На странице корзины:
Других решений пока нет …