WooCommerce запрещает оформление заказа, пока не введен почтовый индекс

Попытка запретить клиентам нажимать кнопку «Перейти к оплате» до тех пор, пока не будет введен почтовый индекс. Однако обнаружил, что с функцией ниже, что если вы измените количество и обновите корзину — функция больше не работает, и вы можете осуществить платеж без доставки. Есть идеи?

add_action('wp_head','prevent_proceed_to_checkout');
function prevent_proceed_to_checkout() {
echo 'alert(Please enter postcode before payment!")';
}

1

Решение

Обновлено — 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 вашей активной дочерней темы (или активной темы). Проверено и работает.

На странице корзины:

введите описание изображения здесь

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]