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

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

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

Шаги реализации: добавление и обработка поля срока годности

1. Добавляем поле срока годности в карточку товара (опционально)

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

add_action('woocommerce_before_add_to_cart_button', 'add_expiration_date_field');
function add_expiration_date_field() {
    echo '<p class="form-field expiration-date">';
    echo '<label for="expiration_date">Срок годности</label>';
    echo '<input type="date" id="expiration_date" name="expiration_date" required />';
    echo '</p>';
}

// Валидация поля
add_filter('woocommerce_add_to_cart_validation', 'validate_expiration_date_field', 10, 3);
function validate_expiration_date_field($passed, $product_id, $quantity) {
    if (empty($_POST['expiration_date'])) {
        wc_add_notice('Пожалуйста, укажите срок годности.', 'error');
        return false;
    }
    return $passed;
}

// Сохраняем поле в данные корзины
add_filter('woocommerce_add_cart_item_data', 'save_expiration_date_cart_item_data', 10, 2);
function save_expiration_date_cart_item_data($cart_item_data, $product_id) {
    if (!empty($_POST['expiration_date'])) {
        $cart_item_data['expiration_date'] = sanitize_text_field($_POST['expiration_date']);
    }
    return $cart_item_data;
}

2. Отображаем поле срока годности в корзине и на странице оформления заказа

// Показываем срок годности в корзине
add_filter('woocommerce_get_item_data', 'display_expiration_date_cart', 10, 2);
function display_expiration_date_cart($item_data, $cart_item) {
    if (!empty($cart_item['expiration_date'])) {
        $item_data[] = array(
            'key' => 'Срок годности',
            'value' => esc_html($cart_item['expiration_date'])
        );
    }
    return $item_data;
}

3. Сохраняем срок годности в метаданные заказа

// При оформлении заказа
add_action('woocommerce_checkout_create_order_line_item', 'add_expiration_date_order_item_meta', 10, 4);
function add_expiration_date_order_item_meta($item, $cart_item_key, $values, $order) {
    if (!empty($values['expiration_date'])) {
        $item->add_meta_data('Срок годности', $values['expiration_date'], true);
    }
}

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

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

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

  • Поле не отображается на странице товара. Проверьте, что хук woocommerce_before_add_to_cart_button корректно работает с вашей темой. Возможно, тема переопределяет шаблон. Можно использовать woocommerce_after_add_to_cart_button.
  • Данные срока годности не сохраняются в корзине. Убедитесь, что поле имеет атрибут name="expiration_date" и что в woocommerce_add_cart_item_data значение корректно передаётся.
  • Срок годности не отображается в заказе. Проверьте, что хук woocommerce_checkout_create_order_line_item подключён и не конфликтует с другими плагинами.
  • Ошибка при валидации даты. Проверьте формат даты и используйте sanitize_text_field для очистки входных данных.

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

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

Сравнение вариантов реализации

ВариантПреимуществаНедостатки
Добавление поля через кастомный inputГибкость, подходит для уникальных датНеобходимо реализовывать валидацию и сохранение вручную
Использование вариаций WooCommerceАвтоматическая поддержка, меньше кастомного кодаПодходит только для ограниченного набора дат
Плагин для пользовательских полей в WooCommerceПростота, готовые решенияДополнительные зависимости, возможные конфликты

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как избежать конфликтов между плагинами в WordPress: практические методы и примеры
03.02.2026
WooCommerce: как исправить повышенное время отклика корзины при массовом обновлении заказов
21.05.2026
Как создать динамические формы в WordPress с помощью WPRemark
21.01.2026
WooCommerce: как массово удалить варианты товаров без продаж
31.05.2026
Как создать владельческий контент в WordPress с примерами кода
17.03.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше