Добавление уникальных полей в карточку товара 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 своими руками!