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

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

Почему стоит добавлять поля вручную, а не через плагины

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

Кроме того, при ручном добавлении вы сможете:

  • Определять точное расположение полей на странице товара.
  • Управлять валидацией и сохранением данных.
  • Использовать данные в заказах, в письмах и на фронтенде.

Добавляем новое поле на страницу товара WooCommerce

Для начала добавим текстовое поле под ценой товара. Для этого используем хук woocommerce_before_add_to_cart_button. Код добавляем в файл functions.php вашей активной темы или дочерней темы.

function wpmax_add_custom_field() {
    echo '<p class="form-row form-row-wide">';
    echo '<label for="wpmax_custom_text_field">Дополнительная информация</label>';
    echo '<input type="text" id="wpmax_custom_text_field" name="wpmax_custom_text_field" value="" />';
    echo '</p>';
}
add_action('woocommerce_before_add_to_cart_button', 'wpmax_add_custom_field');

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

Сохраняем данные поля в корзину и заказ

Чтобы данные из поля не потерялись, нужно сохранить их в сессии корзины, а затем добавить в заказ. Для этого используем несколько хуков WooCommerce.

Сохраняем в корзине

function wpmax_save_custom_field_cart_item_data($cart_item_data, $product_id, $variation_id) {
    if (isset($_POST['wpmax_custom_text_field'])) {
        $cart_item_data['wpmax_custom_text_field'] = sanitize_text_field($_POST['wpmax_custom_text_field']);
        // Для обновления ключа, чтобы WooCommerce видел разный товар
        $cart_item_data['unique_key'] = md5(microtime().rand());
    }
    return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'wpmax_save_custom_field_cart_item_data', 10, 3);

Отображаем в корзине и в заказе

function wpmax_display_custom_field_cart($item_data, $cart_item) {
    if (isset($cart_item['wpmax_custom_text_field'])) {
        $item_data[] = array(
            'key'     => 'Дополнительная информация',
            'value'   => wc_clean($cart_item['wpmax_custom_text_field']),
            'display' => '',
        );
    }
    return $item_data;
}
add_filter('woocommerce_get_item_data', 'wpmax_display_custom_field_cart', 10, 2);

Сохраняем в метаданных заказа

function wpmax_add_custom_field_order_item_meta($item, $cart_item_key, $values, $order) {
    if (isset($values['wpmax_custom_text_field'])) {
        $item->add_meta_data('Дополнительная информация', $values['wpmax_custom_text_field']);
    }
}
add_action('woocommerce_checkout_create_order_line_item', 'wpmax_add_custom_field_order_item_meta', 10, 4);

Выводим уникальное поле в админке и в письмах

Метаданные заказа автоматически отображаются в админке WooCommerce и в письмах покупателям. Однако, если нужно более гибко их выводить, можно добавить код для кастомного отображения.

Пример вывода в административной части

function wpmax_display_custom_field_admin_order_meta($item_id, $item, $product) {
    $custom_text = wc_get_order_item_meta($item_id, 'Дополнительная информация', true);
    if ($custom_text) {
        echo '<p><strong>Дополнительная информация:</strong> ' . esc_html($custom_text) . '</p>';
    }
}
add_action('woocommerce_before_order_itemmeta', 'wpmax_display_custom_field_admin_order_meta', 10, 3);

Валидация пользовательского поля

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

function wpmax_validate_custom_field() {
    if (isset($_POST['wpmax_custom_text_field']) && empty(trim($_POST['wpmax_custom_text_field']))) {
        wc_add_notice(__('Пожалуйста, заполните поле "Дополнительная информация".', 'wpmax'), 'error');
        return false;
    }
    return true;
}
add_action('woocommerce_add_to_cart_validation', 'wpmax_validate_custom_field', 10, 0);

Заключение и рекомендации

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

Если хотите автоматизировать этот процесс или добавить комплексные поля с разными типами данных, можно обратить внимание на плагины из каталога WPSHOP, например, Clearfy Pro для оптимизации или Expert Review для отзывов с дополнительными полями.

Экспериментируйте с кодом, и вы увидите, как просто можно сделать удобный и мощный магазин на WooCommerce своими руками!

WooCommerce: как отключить автоматическое обновление статуса заказов
04.06.2026
Как изменить размер изображений в WooCommerce без поддержки темы
07.03.2026
Как удалить разные типы кешей в WordPress: практическое руководство
26.01.2026
Как избежать конфликтов между WooCommerce и кастомными плагинами в WordPress
23.04.2026
WooCommerce: как исключить товар из каталога и поиска без удаления
01.06.2026