Проверка наличия номера дома в поле адреса (с использованием блоков WooCommerce)

В настоящее время при использовании блока оформления заказа (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( 'Платежный адрес должен содержать номер дома!' );
    }
}

Поделиться с друзьями
Документация WooCommerce