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

В WooCommerce срок доставки часто нужен не «для красоты», а чтобы снять лишние вопросы до оплаты: клиент видит, когда примерно получит заказ, а магазин — меньше отмен и уточняющих писем. Проблема в том, что стандартный WooCommerce не умеет показывать понятный срок доставки из коробки: есть стоимость, есть методы доставки, но нет нормального текста вроде «2–4 рабочих дня» в корзине и на checkout.

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

Когда эта настройка нужна и что именно ломается

Чаще всего задача всплывает в одном из трёх случаев:

  • у вас несколько зон доставки, и в каждой разные сроки;
  • срок зависит от способа доставки: курьер, самовывоз, почта, экспресс;
  • менеджеры вручную пишут срок в комментариях, но клиент его не видит до оформления заказа.

Если оставить всё как есть, покупатель видит только название метода и цену. Для магазина это означает больше неопределённости: люди не понимают, успеет ли заказ к нужной дате, и чаще бросают корзину на этапе checkout.

Диагностика проблемы

Перед тем как писать код, проверьте, где именно у вас должен появляться срок:

  • в списке способов доставки на странице корзины;
  • под выбранным методом на checkout;
  • в письме клиенту после оформления заказа;
  • в админке заказа для менеджера.

Если срок нужен только на фронтенде, достаточно вывода в корзине и checkout. Если менеджеру тоже важно видеть его в заказе, лучше хранить значение в метаполях выбранного shipping method или дублировать его в примечании к заказу.

Какой подход выбрать: плагин, код или гибрид

Для такой задачи обычно есть три варианта. Если нужен быстрый запуск без разработки, можно взять плагин. Если нужна точная логика под ваши зоны и методы доставки, надёжнее код. Гибрид подходит, когда часть данных хранится в настройках, а вывод делается шаблонно.

ПодходПлюсыМинусы
ПлагинБыстро, без кода, удобно для менеджеровМеньше контроля, возможны лишние настройки и зависимость от разработчика
КодТочный вывод, можно привязать к зонам и методам доставкиНужна аккуратная реализация и тестирование
ГибридУдобно хранить данные в админке, а выводить кодомЧуть сложнее поддержка

Если у вас уже есть набор служебных настроек и вы не хотите захламлять тему, код в мини-плагине или в functions.php дочерней темы — самый практичный путь.

Пошаговое решение: добавляем срок доставки к способу доставки

Идея простая: для каждого shipping method сохраняем дополнительный текст, а потом подставляем его рядом с названием метода. Для этого удобно использовать идентификатор метода доставки, который WooCommerce уже отдаёт в корзине и на checkout.

Шаг 1. Добавьте поле в настройки способа доставки

Ниже пример для простого сценария: срок доставки хранится в настройках конкретного метода доставки в зоне. Код добавляет поле в форму редактирования метода и сохраняет значение.

<?php
add_action( 'woocommerce_shipping_instance_form_fields_flat_rate', function( $fields ) {
    $fields['delivery_time'] = array(
        'title'       => __( 'Срок доставки', 'textdomain' ),
        'type'        => 'text',
        'description' => __( 'Например: 2–4 рабочих дня', 'textdomain' ),
        'default'     => '',
        'desc_tip'    => true,
    );

    return $fields;
} );

add_action( 'woocommerce_shipping_instance_form_fields_local_pickup', function( $fields ) {
    $fields['delivery_time'] = array(
        'title'       => __( 'Срок выдачи', 'textdomain' ),
        'type'        => 'text',
        'description' => __( 'Например: сегодня или завтра', 'textdomain' ),
        'default'     => '',
        'desc_tip'    => true,
    );

    return $fields;
} );

Этот пример рассчитан на стандартные методы WooCommerce flat_rate и local_pickup. Если у вас другой метод, нужно подставить его идентификатор в название хука. Это не универсальный магический фильтр — он должен совпадать с типом метода доставки.

Шаг 2. Выведите срок рядом с названием метода

Когда значение сохранено, его можно показать через фильтр woocommerce_cart_shipping_method_full_label. Это безопаснее, чем править шаблон вручную: логика останется в одном месте и не сломается при обновлении темы.

<?php
add_filter( 'woocommerce_cart_shipping_method_full_label', function( $label, $method ) {
    $delivery_time = '';

    if ( is_object( $method ) && ! empty( $method->instance_id ) ) {
        $settings = get_option( 'woocommerce_' . $method->method_id . '_' . $method->instance_id . '_settings', array() );

        if ( ! empty( $settings['delivery_time'] ) ) {
            $delivery_time = $settings['delivery_time'];
        }
    }

    if ( $delivery_time ) {
        $label .= '<br><small class="shipping-delivery-time">' . esc_html( $delivery_time ) . '</small>';
    }

    return $label;
}, 10, 2 );

Здесь важно, что мы не доверяем данным из настроек слепо: вывод экранируется через esc_html(). Это базовая защита от случайной вставки HTML в админке.

Шаг 3. Покажите срок на странице оформления заказа отдельной строкой

Если одного добавления к названию недостаточно, можно вывести пояснение ниже выбранного метода. Для этого удобен фильтр woocommerce_shipping_method_add_rate_description в новых версиях WooCommerce может быть недоступен в вашей сборке, поэтому надёжнее использовать вывод через label или отдельный блок в checkout. На практике чаще всего хватает именно варианта с label.

Если нужен отдельный блок под списком доставки, можно использовать действие woocommerce_review_order_after_shipping и выводить подсказку только для выбранного метода. Это уже чуть больше кода, но иногда UX получается чище.

Как проверить, что решение сработало

После внедрения не ограничивайтесь визуальной проверкой на одной странице. Срок доставки должен корректно отображаться в нескольких сценариях:

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

Проверка по шагам:

  1. Откройте WooCommerce → Настройки → Доставка → Зоны доставки.
  2. Откройте нужный способ доставки и заполните поле срока.
  3. Добавьте товар в корзину и выберите этот способ.
  4. Убедитесь, что рядом с названием метода появился срок.
  5. Перейдите на checkout и проверьте, что текст не дублируется и не ломает верстку.

Если срок не появился, сначала проверьте идентификатор метода доставки. Очень часто проблема не в коде, а в том, что метод называется не flat_rate, а, например, кастомный метод от плагина доставки.

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

Поле не сохраняется в настройках метода

Обычно причина в том, что хук привязан не к тому методу доставки. Для стандартного flat rate и local pickup нужны разные фильтры формы. Если вы используете сторонний shipping plugin, его настройки могут храниться иначе, и тогда этот способ не подойдёт без адаптации.

Срок отображается дважды

Так бывает, если вы одновременно добавили текст в label и ещё выводите его отдельным блоком в checkout. Оставьте один источник вывода. Для большинства магазинов достаточно только label.

На checkout виден старый текст после изменения настроек

Причина часто в кеше: плагин кеширования, серверный кеш или даже кеш браузера. Очистите кеш страницы корзины и checkout, а если используете фрагментный кеш WooCommerce — проверьте, не перехватывает ли он блок доставки.

Сломалась верстка списка доставки

Если вы вставляете <br> и <small> без стилей, в некоторых темах список может стать слишком высоким. Лучше добавить минимальный CSS:

.shipping-delivery-time {
    display: block;
    margin-top: 4px;
    color: #666;
    font-size: 12px;
    line-height: 1.4;
}

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

Если срок доставки хранится в настройках метода, не тяните лишние запросы в базу на каждом рендере. В примере выше используется get_option(), и это нормально для небольшого количества методов. Но если у вас много зон и сложная логика, лучше заранее продумать структуру данных и не собирать срок из нескольких метаполей на каждом запросе checkout.

Ещё один момент — не вставляйте в срок доставки HTML от менеджеров без фильтрации. Если текст редактируется в админке, выводите его через esc_html() или wp_kses(), если действительно нужен ограниченный HTML.

Если вы хотите вынести такие правки из темы в отдельный слой и не зависеть от обновлений шаблона, удобно оформить их как маленький функциональный плагин. Для магазинов, где параллельно нужны чистка дублей, SEO-правки и контроль служебных элементов, иногда проще собрать это в одном наборе настроек, чем размазывать по теме. В таком случае можно посмотреть на Clearfy Pro: https://wpshop.ru/plugins/clearfy.

Что делать, если срок должен зависеть от города или суммы заказа

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

Например, для самовывоза можно показывать «сегодня», а для курьера — «2–4 рабочих дня». Если сумма заказа выше определённого порога и доставка идёт через отдельную логистику, срок можно увеличить на один день. Главное — не делать такую логику скрытой и не менять срок без объяснения клиенту: это быстро приводит к недоверию.

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

Как установить ограничение доступа к wp-admin по IP в WordPress
02.03.2026
Как отключить XML-RPC в WordPress без потери функциональности
21.04.2026
Как отключить Emoji в WordPress: эффективные методы и примеры кода
19.12.2025
Как использовать wp-config.php для управления конфигурацией WordPress
17.01.2026
Как удалить, изменить и запретить meta robots в WordPress: практические решения
06.03.2026
×
WordPress - сейчас выгоднее всего!

Скидка -20% на премиум темы и плагины

Возьми скидку сейчас