Проверка и валидация данных в форме оформления заказа WooCommerce

В WooCommerce оформление заказа — это ключевой этап, где собираются важные данные от клиента. Чтобы обеспечить корректность и полноту информации, необходимо реализовать проверку и валидацию данных. В этой статье рассмотрим, как добавлять пользовательские проверки в форму оформления заказа WooCommerce, какие хуки использовать, а также приведём примеры кода для типичных задач.

Почему важна проверка данных в форме оформления заказа WooCommerce

Данные, введённые клиентом, влияют на успешную обработку заказа, доставку и последующую коммуникацию. Некорректные или неполные данные могут привести к ошибкам, возвратам или неудобствам для клиента и магазина. По умолчанию WooCommerce проверяет только основные поля. Однако если вы добавляете свои поля или хотите расширить валидацию, нужно программно реализовать дополнительные проверки.

Правильная валидация помогает:

  • Избежать ошибок при оформлении заказа;
  • Обеспечить корректность данных для доставки и оплаты;
  • Снизить нагрузку на службу поддержки;
  • Обеспечить соответствие требованиям законодательства (например, проверка ИНН или паспортных данных).

Как добавить свою проверку в форму оформления заказа WooCommerce

WooCommerce предоставляет несколько хуков для расширения логики проверки. Основной для валидации — woocommerce_checkout_process. В этот хук можно добавить свою функцию, которая будет проверять данные и, при необходимости, добавлять сообщения об ошибках.

Пример базовой функции проверки пользовательского поля:

function wporders_validate_custom_checkout_field() {
    if ( empty( $_POST['wporders_custom_field'] ) ) {
        wc_add_notice( __( 'Пожалуйста, заполните поле «Особые требования».' ), 'error' );
    }
}
add_action( 'woocommerce_checkout_process', 'wporders_validate_custom_checkout_field' );

Здесь мы проверяем, что поле wporders_custom_field не пустое. Если оно пустое, добавляем ошибку через wc_add_notice, и пользователь не сможет продолжить оформление заказа, пока не исправит ошибку.

Добавление пользовательского поля в форму оформления заказа

Для полноценной проверки часто нужно сначала добавить своё поле в форму. Для этого используется хук woocommerce_after_order_notes или woocommerce_checkout_fields. Пример добавления текстового поля:

function wporders_add_custom_checkout_field( $checkout ) {
    echo '<div id="wporders_custom_checkout_field">';
    woocommerce_form_field( 'wporders_custom_field', array(
        'type'          => 'text',
        'class'         => array('wporders-custom-field form-row-wide'),
        'label'         => __('Особые требования к заказу'),
        'placeholder'   => __('Введите ваши пожелания'),
        'required'      => false,
    ), $checkout->get_value( 'wporders_custom_field' ));
    echo '</div>';
}
add_action( 'woocommerce_after_order_notes', 'wporders_add_custom_checkout_field' );

Такое поле появится на странице оформления заказа. Теперь к нему можно применить валидацию, как показано выше.

Валидация сложных данных: примеры и решения

Иногда требуется проверять данные по специальным правилам. Например, проверка формата ИНН, почтового индекса, телефона или даты. Рассмотрим примеры.

Проверка формата ИНН в заказе

Добавим поле ИНН и проверим, что введённый номер состоит из 10 или 12 цифр:

function wporders_add_inn_field( $checkout ) {
    woocommerce_form_field( 'wporders_inn', array(
        'type'          => 'text',
        'class'         => array('wporders-inn form-row-wide'),
        'label'         => __('ИНН'),
        'required'      => true,
    ), $checkout->get_value( 'wporders_inn' ));
}
add_action( 'woocommerce_after_order_notes', 'wporders_add_inn_field' );

function wporders_validate_inn_field() {
    if ( isset( $_POST['wporders_inn'] ) ) {
        $inn = trim( $_POST['wporders_inn'] );
        if ( ! preg_match('/^\d{10}|\d{12}$/', $inn) ) {
            wc_add_notice( __( 'Введите корректный ИНН из 10 или 12 цифр.' ), 'error' );
        }
    }
}
add_action( 'woocommerce_checkout_process', 'wporders_validate_inn_field' );

Проверка телефонного номера с маской

Для проверки телефона используем регулярное выражение, например, для российского формата:

function wporders_validate_phone_field() {
    if ( isset( $_POST['billing_phone'] ) ) {
        $phone = trim( $_POST['billing_phone'] );
        if ( ! preg_match('/^\+7\d{10}$/', $phone) ) {
            wc_add_notice( __( 'Введите телефон в формате +7XXXXXXXXXX.' ), 'error' );
        }
    }
}
add_action( 'woocommerce_checkout_process', 'wporders_validate_phone_field' );

Сохранение пользовательских данных в заказ

После успешной валидации и оформления заказа важно сохранить введённые данные в мета-поля заказа для дальнейшего использования. Для этого используем хук woocommerce_checkout_update_order_meta:

function wporders_save_custom_checkout_field( $order_id ) {
    if ( ! empty( $_POST['wporders_custom_field'] ) ) {
        update_post_meta( $order_id, '_wporders_custom_field', sanitize_text_field( $_POST['wporders_custom_field'] ) );
    }
    if ( ! empty( $_POST['wporders_inn'] ) ) {
        update_post_meta( $order_id, '_wporders_inn', sanitize_text_field( $_POST['wporders_inn'] ) );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'wporders_save_custom_checkout_field' );

Отображение пользовательских данных в админке и письмах

Чтобы видеть введённые данные в админке заказа, добавим их отображение с помощью хука woocommerce_admin_order_data_after_billing_address:

function wporders_display_custom_data_in_admin( $order ) {
    $custom_field = get_post_meta( $order->get_id(), '_wporders_custom_field', true );
    if ( $custom_field ) {
        echo '<p><strong>Особые требования:</strong> ' . esc_html( $custom_field ) . '</p>';
    }
    $inn = get_post_meta( $order->get_id(), '_wporders_inn', true );
    if ( $inn ) {
        echo '<p><strong>ИНН:</strong> ' . esc_html( $inn ) . '</p>';
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'wporders_display_custom_data_in_admin' );

Для добавления данных в письма используется фильтр woocommerce_email_order_meta_fields. Например:

function wporders_add_custom_data_to_emails( $fields, $sent_to_admin, $order ) {
    $fields['wporders_custom_field'] = array(
        'label' => __('Особые требования'),
        'value' => get_post_meta( $order->get_id(), '_wporders_custom_field', true ),
    );
    $fields['wporders_inn'] = array(
        'label' => __('ИНН'),
        'value' => get_post_meta( $order->get_id(), '_wporders_inn', true ),
    );
    return $fields;
}
add_filter( 'woocommerce_email_order_meta_fields', 'wporders_add_custom_data_to_emails', 10, 3 );

Плагины для расширенной проверки и валидации полей WooCommerce

Если не хочется писать код, можно использовать готовые плагины для валидации полей на странице оформления заказа. Рекомендуются:

  • Clearfy Pro — расширенный плагин для оптимизации и безопасности, содержит возможности для кастомизации форм.
  • WooCommerce Checkout Field Editor — позволяет добавлять и валидировать поля без программирования.

Однако для точного контроля лучше использовать собственные решения на базе хуков.

Выводы и рекомендации

Расширение проверки и валидации данных в форме оформления заказа WooCommerce — важная задача для повышения качества данных и удобства работы магазина. Используя хуки woocommerce_checkout_process, woocommerce_after_order_notes и другие, можно реализовать точечные проверки и сохранить данные вместе с заказом.

Не забывайте всегда проверять и фильтровать пользовательский ввод для безопасности. И при необходимости расширять отображение данных в админке и письмах для удобства обработки заказов.

Автоматическая отмена и возврат заказов в WooCommerce при проблемах с оплатой
22.04.2026
WooCommerce: как использовать кастомные метаданные для поиска и фильтров заказов
22.04.2026
Добавление пользовательских статусов заказов в WooCommerce: подробное руководство с примерами кода
03.04.2026
Как создать автоматический отчет по заказам WooCommerce с помощью PHP
07.04.2026
Автопродолжение заказов в WooCommerce: пошаговое руководство
07.11.2025