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

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

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

Как проверить, доступна ли смена адреса доставки в вашем магазине?

  • Авторизуйтесь на сайте как клиент.
  • Перейдите в «Мои заказы» → выберите заказ со статусом «Обработка» или «Выполнен».
  • Попробуйте отредактировать адрес доставки через кнопку «Изменить» или аналогичный интерфейс.

Если возможность изменить адрес есть, значит нужно внедрять ограничения.

Пошаговое решение: отключаем редактирование адреса доставки после оформления заказа

1. Удаление ссылки «Изменить адрес доставки» в личном кабинете

Добавьте следующий код в файл functions.php дочерней темы или в отдельный плагин для сайта:

add_filter('woocommerce_my_account_my_address_formatted_address', 'disable_shipping_address_edit_link', 10, 3);
function disable_shipping_address_edit_link($address, $customer_id, $address_type) {
    if ('shipping' === $address_type) {
        // Удаляем ссылку на редактирование
        remove_action('woocommerce_before_edit_account_address_form', 'woocommerce_edit_address_form');
    }
    return $address;
}

Этот код не всегда полностью убирает кнопку, поэтому лучше дополнительно скрыть кнопку через CSS:

.woocommerce-MyAccount-navigation-link--edit-address {
    display: none !important;
}

2. Блокировка изменения адреса доставки через REST API и формы

Чтобы исключить возможность изменения адреса через прямые запросы, используйте следующий фильтр, который проверяет статус заказа и запрещает обновление адреса:

add_filter('woocommerce_customer_save_address', 'prevent_shipping_address_change_after_order', 10, 3);
function prevent_shipping_address_change_after_order($should_save, $user_id, $address_type) {
    if ('shipping' === $address_type) {
        // Проверяем наличие заказов в статусе обработки или выше
        $orders = wc_get_orders(array(
            'customer_id' => $user_id,
            'status' => array('processing','completed','on-hold'),
            'limit' => 1
        ));
        if (!empty($orders)) {
            // Блокируем сохранение адреса
            return false;
        }
    }
    return $should_save;
}

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

  • Авторизуйтесь под клиентом, у которого есть заказ с активным статусом.
  • Перейдите в «Мои заказы» → «Адреса» и попытайтесь изменить адрес доставки.
  • Кнопка редактирования адреса должна отсутствовать или при попытке сохранения изменений должна происходить ошибка.
  • Попробуйте изменить адрес напрямую через REST API (если используете внешние приложения) — изменения не должны применяться.

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

  • Редактирование адреса доступно несмотря на код — возможно, тема или плагин переопределяют шаблоны WooCommerce. Проверьте наличие кастомных шаблонов в woocommerce/myaccount и внесите правки там.
  • Кнопка редактирования исчезла, но пользователь все равно может изменить адрес через REST API — убедитесь, что фильтр woocommerce_customer_save_address подключен и работает, а также проверьте права доступа.
  • Стили не применяются и кнопка видна — очистите кэш браузера и кэш сайта (если есть).

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

  • Не используйте только CSS для блокировки функционала — это легко обходится пользователем.
  • Проверяйте права пользователя всегда на сервере, особенно при работе с REST API.
  • Для сложных сценариев интеграции с логистикой используйте статус заказа как критерий блокировки изменений.
  • Если используете WPShop, плагин Clearfy Pro поможет убрать лишние элементы и защитить формы от неавторизованных изменений.

Сравнение вариантов решения

МетодОписаниеПлюсыМинусы
Удаление кнопки и скрытие через CSSУбирает UI для изменения адресаПростота реализацииНе защищает от прямых запросов
Фильтр на сохранение адреса (PHP)Блокирует изменения на сервереНадежно, предотвращает обходТребуется тестирование с плагинами
Использование плагинов безопасности/оптимизацииДополнительные инструменты контроляУдобство и расширенные возможностиМожет влиять на производительность
Как изменить и удалить стандартную регистрацию WordPress
26.11.2025
Как изменить атрибуты вариативных товаров в WooCommerce через код
21.05.2026
Как удалить верстку WordPress без потери функциональности
29.11.2025
Как запретить изменение стоимости товара в WooCommerce после оформления заказа
30.05.2026
Как отключить визуальный редактор Gutenberg для определённых ролей в WordPress
21.02.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас