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

Диагностика задачи: зачем менять поля в форме оплаты WooCommerce

Стандартная форма оплаты WooCommerce содержит множество полей, которые не всегда нужны конкретному магазину. Например, если ваш магазин продает цифровые товары, поле "Адрес доставки" избыточно. Или вы хотите убрать поле "Компания", чтобы упростить оформление заказа. Важно провести точечные изменения именно в форме оплаты, не затрагивая регистрацию или профиль пользователя.

Пошаговое решение: удаление и изменение полей формы оплаты

1. Получение списка стандартных полей формы оплаты

WooCommerce использует фильтр woocommerce_checkout_fields для управления всеми полями на странице оформления заказа. Поля разбиты на группы, например, 'billing', 'shipping', 'account' и 'order'.

add_filter('woocommerce_checkout_fields', 'custom_checkout_fields_remove');
function custom_checkout_fields_remove($fields) {
    // Выведем все поля в лог для диагностики
    error_log(print_r($fields, true));
    return $fields;
}

Этот код поможет увидеть структуру полей в debug.log.

2. Удаление ненужных полей

Чтобы убрать поле, например, "billing_company" (Компания), используйте unset:

add_filter('woocommerce_checkout_fields', 'custom_checkout_fields_remove');
function custom_checkout_fields_remove($fields) {
    // Удаляем поле Компания
    unset($fields['billing']['billing_company']);
    
    // Удаляем поле Адрес доставки
    unset($fields['shipping']['shipping_address_1']);
    unset($fields['shipping']['shipping_address_2']);
    
    return $fields;
}

3. Изменение параметров поля (например, обязательность или label)

Можно изменить заголовок поля или сделать его необязательным:

add_filter('woocommerce_checkout_fields', 'custom_checkout_fields_modify');
function custom_checkout_fields_modify($fields) {
    // Изменяем label поля "billing_phone"
    $fields['billing']['billing_phone']['label'] = 'Контактный телефон';
    
    // Делаем поле необязательным
    $fields['billing']['billing_phone']['required'] = false;
    
    return $fields;
}

4. Добавление собственного поля в форму оплаты

Для расширения формы добавьте новое поле в нужную секцию:

add_filter('woocommerce_checkout_fields', 'custom_add_checkout_field');
function custom_add_checkout_field($fields) {
    $fields['billing']['billing_custom_note'] = array(
        'type' => 'text',
        'label' => 'Дополнительная информация',
        'required' => false,
        'class' => array('form-row-wide'),
        'priority' => 120,
    );
    return $fields;
}

// Сохраняем поле в заказе
add_action('woocommerce_checkout_update_order_meta', 'save_custom_checkout_field');
function save_custom_checkout_field($order_id) {
    if (!empty($_POST['billing_custom_note'])) {
        update_post_meta($order_id, '_billing_custom_note', sanitize_text_field($_POST['billing_custom_note']));
    }
}

// Отображаем поле в админке заказа
add_action('woocommerce_admin_order_data_after_billing_address', 'show_custom_field_admin_order', 10, 1);
function show_custom_field_admin_order($order){
    $custom_note = get_post_meta($order->get_id(), '_billing_custom_note', true);
    if ($custom_note) {
        echo '<p><strong>Дополнительная информация:</strong> ' . esc_html($custom_note) . '</p>';
    }
}

Проверка результата после внедрения

  • Очистите кеш сайта и браузера.
  • Перейдите на страницу оформления заказа, убедитесь, что удаленные поля отсутствуют.
  • Проверьте, что измененные поля имеют новые метки и обязательность.
  • Если добавлено новое поле, заполните его и оформите заказ, затем проверьте, что данные отображаются в админке заказа.

Частые ошибки и как их исправить

  • Изменения не видны: Проверьте, отключен ли кеширование, в том числе на уровне сервера. Очистите кеш.
  • Ошибка в синтаксисе PHP: Включите WP_DEBUG, чтобы видеть ошибки. Проверяйте код на наличие лишних символов.
  • Поле не сохраняется: Убедитесь, что используете правильные хуки для сохранения данных (woocommerce_checkout_update_order_meta).
  • Поле обязательное, но не отмечено: Проверьте, что параметр 'required' установлен корректно и форма валидируется без конфликтов с другими плагинами.

Практические советы по безопасности и производительности

  • Используйте sanitize_text_field() для очистки пользовательских данных перед сохранением.
  • Не удаляйте поля, которые могут быть обязательны для платежных шлюзов.
  • Проверяйте совместимость изменений с используемой темой и плагинами WooCommerce, чтобы избежать конфликтов.
  • Для сложных изменений лучше создать дочернюю тему или собственный плагин, чтобы не потерять настройки при обновлении.

Сравнение способов изменения полей WooCommerce

МетодПлюсыМинусы
Фильтр woocommerce_checkout_fieldsБыстро, гибко, без плагиновТребует навыков PHP, можно ошибиться
Плагины (Checkout Field Editor)Удобный интерфейс, быстроДополнительная нагрузка, возможные конфликты
Редактирование шаблонов WooCommerceМаксимальная кастомизацияСложно, требует поддержки при обновлениях
Как разрешить загрузку больших файлов в WooCommerce: практическое руководство
11.05.2026
Как использовать кастомные колонки в WooCommerce для управления продуктами
22.05.2026
Как создать плагин для автоматического очищения кеша WordPress
25.11.2025
Как автоматизировать удаление старого контента в WordPress
14.03.2026
Как изменить адрес авторской страницы в WordPress без плагинов
20.12.2025