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

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

Почему стандартных атрибутов WooCommerce может быть недостаточно

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

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

Добавление выбора позиции с помощью плагина Advanced Custom Fields (ACF)

Самый простой способ — использовать бесплатный плагин Advanced Custom Fields. Он позволяет создавать удобный интерфейс выбора (select, radio) в админке товаров WooCommerce.

Инструкция:

  1. Устанавливаем и активируем ACF.
  2. Создаем новое поле типа «Выбор» (Select) или «Радио» (Radio Button), например с названием position_choice.
  3. Добавляем варианты выбора — например: «Верхняя полка», «Средняя полка», «Нижняя полка».
  4. В настройках группы полей указываем, что поле показывается для типа записи product.

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

Отображение выбранной позиции на странице товара

Чтобы показывать выбранную позицию на странице товара, добавим в файл functions.php вашей темы или дочерней темы следующий код:

function wplancer_show_product_position() {
    global $product;
    $position = get_field('position_choice', $product->get_id());
    if ($position) {
        echo '<p><strong>Выбор позиции:</strong> ' . esc_html($position) . '</p>';
    }
}
add_action('woocommerce_single_product_summary', 'wplancer_show_product_position', 25);

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

Сохранение выбора позиции при добавлении товара в корзину

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

Добавление поля выбора в форму добавления в корзину

function wplancer_add_position_field_to_product() {
    global $product;
    $position = get_field('position_choice', $product->get_id());
    if (!$position) return;
    
    $choices = get_field_object('position_choice', $product->get_id())['choices'];
    echo '<label for="position_choice">Выберите позицию:</label><select name="position_choice" id="position_choice" required>';
    foreach ($choices as $key => $label) {
        echo '<option value="' . esc_attr($key) . '">' . esc_html($label) . '</option>';
    }
    echo '</select>';
}
add_action('woocommerce_before_add_to_cart_button', 'wplancer_add_position_field_to_product');

Обработка и сохранение выбранного значения в корзине

function wplancer_add_position_to_cart_item($cart_item_data, $product_id) {
    if (isset($_POST['position_choice'])) {
        $cart_item_data['position_choice'] = sanitize_text_field($_POST['position_choice']);
        $cart_item_data['unique_key'] = md5(microtime().rand()); // чтобы товары с разным выбором не слипались
    }
    return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'wplancer_add_position_to_cart_item', 10, 2);

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

function wplancer_display_position_cart($item_data, $cart_item) {
    if (isset($cart_item['position_choice'])) {
        $position_label = get_field_object('position_choice', $cart_item['product_id'])['choices'][$cart_item['position_choice']];
        $item_data[] = array(
            'key' => 'Позиция',
            'value' => $position_label,
        );
    }
    return $item_data;
}
add_filter('woocommerce_get_item_data', 'wplancer_display_position_cart', 10, 2);

function wplancer_add_position_order_item_meta($item, $cart_item_key, $values, $order) {
    if (isset($values['position_choice'])) {
        $position_label = get_field_object('position_choice', $values['product_id'])['choices'][$values['position_choice']];
        $item->add_meta_data('Позиция', $position_label, true);
    }
}
add_action('woocommerce_checkout_create_order_line_item', 'wplancer_add_position_order_item_meta', 10, 4);

Альтернативный вариант — использовать плагин Custom Product Options

Если не хотите писать код, можно использовать плагин Custom Product Options, который позволяет добавлять любые поля выбора, текстовые, чекбоксы и т.д. прямо из админки WooCommerce с удобным интерфейсом.

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

Вывод

Добавление выбора позиции для товара в WooCommerce — частая задача, требующая гибкого подхода. Использование ACF и небольшого кода позволяет быстро реализовать функционал с сохранением данных в корзине и заказе. Плагин Custom Product Options подойдет тем, кто предпочитает полностью визуальное управление.

Такой подход расширит возможности вашего магазина и улучшит удобство выбора для покупателей.

Как удалить автоматические отзывы в WooCommerce: практическое руководство
10.05.2026
Как создать комплексный фильтрованный список на WordPress
22.12.2025
Как использовать Custom User Meta в WordPress для расширения функционала
25.02.2026
Как создать свой шорткод в WordPress: подробное руководство
08.11.2025
Автоматическое удаление товаров в WooCommerce по срокам и статусам
21.05.2026