Содержание
В настоящее время при использовании блока оформления заказа (Checkout) в WooCommerce Blocks не выполняется проверка, содержит ли адрес доставки или платежный адрес номер дома. Ниже приведены примеры кода, которые добавляют такую проверку.
Добавьте код в файл functions.php дочерней темы или через плагин для добавления пользовательских функций (например, Code Snippets). Не рекомендуется вносить изменения напрямую в родительскую тему, так как они будут потеряны при обновлении.
Проверка номера дома в адресе доставки
Этот пример проверяет, указан ли номер дома в адресе доставки:
<?php
add_action( 'woocommerce_store_api_checkout_update_order_from_request', 'woo_blocks_address_field_validation', 10, 2);
function woo_blocks_address_field_validation( WC_Order $order, $request ) {
$shipping_address = $order->get_address('shipping')['address_1'];
if ( $shipping_address && ! preg_match( '/[0-9]+/', $shipping_address ) ) {
throw new Exception( 'Адрес доставки должен содержать номер дома!' );
}
}
Проверка номера дома в платежном адресе
Этот пример проверяет наличие номера дома в платежном адресе:
<?php
add_action( 'woocommerce_store_api_checkout_update_order_from_request', 'woo_blocks_address_field_validation', 10, 2);
function woo_blocks_address_field_validation( WC_Order $order, $request ) {
$billing_address = $order->get_address('billing')['address_1'];
if ( $billing_address && ! preg_match( '/[0-9]+/', $billing_address ) ) {
throw new Exception( 'Платежный адрес должен содержать номер дома!' );
}
}
Проверка одновременно платежного и адреса доставки
Этот вариант проверяет оба адреса сразу — и платежный, и адрес доставки:
<?php
add_action( 'woocommerce_store_api_checkout_update_order_from_request', 'woo_blocks_address_field_validation', 10, 2);
function woo_blocks_address_field_validation( WC_Order $order, $request ) {
$shipping_address = $order->get_address('shipping')['address_1'];
$billing_address = $order->get_address('billing')['address_1'];
if ( $shipping_address && ! preg_match( '/[0-9]+/', $shipping_address ) ) {
throw new Exception( 'Адрес доставки должен содержать номер дома!' );
}
if ( $billing_address && ! preg_match( '/[0-9]+/', $billing_address ) ) {
throw new Exception( 'Платежный адрес должен содержать номер дома!' );
}
}
