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

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

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

Диагностика проблемы: стандартные возможности WooCommerce

WooCommerce позволяет добавлять пользовательские поля к товарам (custom product fields), но в корзине и на странице оформления заказа поля для срока годности не предусмотрены. Без кастомного кода или плагина нельзя получить от пользователя и сохранить эту информацию вместе с заказом.

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

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

1. Добавляем поле срока годности на страницу корзины

Используем хук woocommerce_after_cart_item_name для вывода поля ввода рядом с названием товара в корзине:

add_action('woocommerce_after_cart_item_name', 'add_expiry_date_field_to_cart', 10, 2); 
function add_expiry_date_field_to_cart($cart_item, $cart_item_key) {
    if (isset($cart_item['expiry_date'])) {
        $expiry_date = $cart_item['expiry_date'];
    } else {
        $expiry_date = '';
    }
    echo '<label for="expiry_date_' . esc_attr($cart_item_key) . '">Срок годности:</label>';
    echo '<input type="date" id="expiry_date_' . esc_attr($cart_item_key) . '" name="expiry_date[' . esc_attr($cart_item_key) . ']" value="' . esc_attr($expiry_date) . '" />';
}

2. Обрабатываем и сохраняем данные при обновлении корзины

Чтобы данные сохранились в сессии, нужно перехватить обновление корзины и сохранить поле в данных товара:

add_action('woocommerce_cart_updated', 'save_expiry_date_field_in_cart');
function save_expiry_date_field_in_cart() {
    if (!isset($_POST['expiry_date']) || !is_array($_POST['expiry_date'])) {
        return;
    }
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        if (isset($_POST['expiry_date'][$cart_item_key])) {
            $expiry_date = sanitize_text_field($_POST['expiry_date'][$cart_item_key]);
            WC()->cart->cart_contents[$cart_item_key]['expiry_date'] = $expiry_date;
        }
    }
}

3. Передаем срок годности в заказ

Используем хук woocommerce_checkout_create_order_line_item, чтобы прикрепить срок годности к каждой позиции заказа:

add_action('woocommerce_checkout_create_order_line_item', 'add_expiry_date_to_order_items', 10, 4);
function add_expiry_date_to_order_items($item, $cart_item_key, $values, $order) {
    if (!empty($values['expiry_date'])) {
        $item->add_meta_data('Срок годности', $values['expiry_date'], true);
    }
}

4. Отображаем срок годности в админке WooCommerce

Чтобы видеть срок годности в заказах админки, добавьте вывод мета-поля:

add_action('woocommerce_admin_order_item_headers', 'add_expiry_date_column_header');
add_action('woocommerce_admin_order_item_values', 'add_expiry_date_column_value', 10, 3);

function add_expiry_date_column_header() {
    echo '<th class="expiry_date_column">Срок годности</th>';
}

function add_expiry_date_column_value($_product, $item, $item_id) {
    $expiry_date = $item->get_meta('Срок годности');
    echo '<td>' . esc_html($expiry_date) . '</td>';
}

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

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

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

  • Поле не сохраняется после обновления корзины. Проверьте, что вы правильно используете хук woocommerce_cart_updated и корректно обрабатываете массив $_POST['expiry_date'].
  • Данные не попадают в заказ. Убедитесь, что метаполя добавляются через woocommerce_checkout_create_order_line_item и что ключи массива совпадают.
  • Ошибка вывода в админке. Проверьте, что функции вывода метаданных подключены к правильным хукам (woocommerce_admin_order_item_headers и woocommerce_admin_order_item_values).
  • Неправильный формат даты. Используйте тип поля date в HTML и sanitize с sanitize_text_field или лучше sanitize_text_field с дополнительной валидацией формата даты.

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

  • Всегда используйте sanitize_text_field для входящих данных из формы.
  • Для более строгой проверки даты используйте PHP-функцию DateTime::createFromFormat перед сохранением.
  • Не храните срок годности в пользовательских мета, а привязывайте к позиции заказа, чтобы избежать потери данных при изменениях.
  • Минимизируйте добавление лишних запросов и операций при обработке корзины, чтобы не замедлить процесс оформления заказа.

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

МетодПлюсыМинусыПример
Код (как в статье)Полный контроль, без плагинов, легко кастомизироватьТребует навыков, нужно тестироватьДобавление поля в корзину через хуки
Плагин Custom Checkout FieldsПростота, быстрый стартМожет грузить сайт, не всегда гибкоAdvanced Custom Fields + интеграция с WooCommerce
Использование пользовательских атрибутов товараМожно задать заранееНе дает ввод от пользователя на этапе корзиныСтандартные атрибуты WooCommerce

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

⭐⭐⭐⭐⭐
WooCommerce: как использовать хуки для добавления пользовательских полей в корзину
22.04.2026
Как избежать конфликтов между плагинами в WordPress: практические методы и примеры
03.02.2026
Как создать функцию автоподсказки в WordPress с примерами кода
16.01.2026
Как создать многоуровневую пагинацию в WordPress с примерами кода
10.02.2026
Как сделать автоматический откат обновлений WordPress при ошибках
01.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее